0

我有一个问题,我正在开发一个应该能够进行一些数学计算的应用程序。这些计算必须准确(或者说没有明显错误)

但是这个简单的代码

double a = 3.048d;
double b = 1000d;

double c = a / b;

给我一个错误的结果 c 不是预期的 0.003048 而是 0.0030480000000000004 这显然是错误的。

double d = 3.048 / 1000; 

这第二个代码片段给出了正确的结果。

我知道用计算机计算时所有浮点运算都不精确,但我不知道如何解决这个问题。

提前致谢!
路德维希

为:
- Android 2.2
测试设备开发:
- HTC Desire

4

4 回答 4

5

您需要用于精确的 percision 是BigDecimal对象:

BigDecimal a = new BigDecimal("3.048");
BigDecimal b = new BigDecimal(1000);

BigDecimal c = a.divide(b);

System.out.println(c); //0.003048
于 2012-05-10T20:52:29.767 回答
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
        }
}
于 2012-05-10T20:51:43.467 回答
1

这是IEEE 754 浮点表示的结果,而不是错误。要处理它,请将您的结果四舍五入到适当的精度。

于 2012-05-10T20:52:30.667 回答
0

使用 BigDecimal 进行如此精确的分配。

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

于 2012-05-10T20:52:00.563 回答