Android - 精确的数学计算

时间:2012-05-10 20:47:46

标签: java 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

4 个答案:

答案 0 :(得分:4)

BigDecimal对象:

需要用于精确精确度的内容
BigDecimal a = new BigDecimal("3.048");
BigDecimal b = new BigDecimal(1000);

BigDecimal c = a.divide(b);

System.out.println(c); //0.003048

答案 1 :(得分:1)

使用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
        }
}

答案 2 :(得分:1)

这是IEEE 754 floating point representation的结果,而不是错误。要处理它,将结果四舍五入到合适的精度。

答案 3 :(得分:0)

将BigDecimal用于此类精确分配。

顺便说一下d的结果显然是正确的,因为double有一个机器编码无法存储结果,你认为这是正确的。