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有一个机器编码无法存储结果,你认为它是正确的。