Android – 精确的数学计算
我有一个问题,我正在开发一个应该能够做一些数学计算的应用程序。 这些计算必须准确(或者说明显不是错误的)
但是这个简单的代码
double a = 3.048d; double b = 1000d; double c = a / b;
给我一个错误的结果c不是预期的0.003048而是0.0030480000000000004,这显然是错误的。
double d = 3.048 / 1000;
第二个代码snipet给出了正确的结果。
我知道在使用计算机进行计算时,所有浮点运算都不准确,但我不知道如何解决这个问题。
提前致谢!
路德维希
开发:
– Android 2.2
为TestDevice:
– HTC Desire
你需要用于精确的percision是BigDecimal对象:
BigDecimal a = new BigDecimal("3.048"); BigDecimal b = new BigDecimal(1000); BigDecimal c = a.divide(b); System.out.println(c); //0.003048
这是IEEE 754浮点表示的结果 ,而不是错误。 要处理它,请将结果四舍五入到合适的精度。
使用BigDecimal进行精确的浮点计算。 通过设置比例,您可以精确指定输出的距离。
import java.math.BigDecimal; class Test{ public static void main(String[] args){ BigDecimal a = new BigDecimal("3.048"); BigDecimal b = new BigDecimal(1000); BigDecimal c = a.divide(b).setScale(6); System.out.println(c); //0.003048 } }
使用BigDecimal进行精确分配。
顺便说一下d的结果显然是正确的,因为double有一个机器编码无法存储结果,你认为它是正确的。