表达式的结果:2.227E-19-1.0+1.0
将为0.0
如何获得2.227E-19的结果?
我有一个表达
a-b+1
和
当一个非常小的数字与大数字一起运作时,如何保持准确性?
答案 0 :(得分:0)
只需使用double
即可存储结果。它具有足够的精度用于此计算。
答案 1 :(得分:0)
如果您事先知道哪些操作数可以很小,您可以重新排序操作:
-b + 1 + a
这样,首先计算a
之前的部分,并且双方(-b+1
和a
)的大小大致相同,导致浮点问题减少。
以下是The Java™ Tutorials的相关部分:
同一行上的运算符具有相同的优先级。当具有相同优先级的运算符出现在同一表达式中时,规则必须控制首先计算的值。除了赋值运算符之外的所有二元运算符都是从左到右计算的;
答案 2 :(得分:0)
或者使用具有足够比例的BigDecimal。