killme2008 / aviatorscript

A high performance scripting language hosted on the JVM.
http://fnil.net/aviator/
4.66k stars 853 forks source link

AviatorEvaluator.execute("10M/3M") 计算后为数值类型,如何保留2位小数 #116

Closed herouu closed 5 years ago

herouu commented 5 years ago

AviatorEvaluator.execute("10M/3M") 计算后为数值类型,作为中间值,如何保留精度,比如2位小数,20 位小数 MathContext类调整的是小数的长度,并非精度

killme2008 commented 5 years ago

MathContext 就是设置精度的

https://docs.oracle.com/javase/7/docs/api/java/math/MathContext.html

killme2008 commented 5 years ago

如果你说的是结果如何保留两位,这是 BigDecimal 的用法问题,请参考他的 javadoc, https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html 例如

    BigDecimal result = (BigDecimal) AviatorEvaluator.execute("10M/3M");
    System.out.println(result.setScale(2, RoundingMode.HALF_EVEN));

aviator 里的高精度计算都是基于 java 的 BigDecimal 实现。