我遇到了问题,我正在开发一个应该可以进行一些数学计算的应用程序。这些计算必须准确(或者说明显不是错误的)
但这个简单的代码
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
答案 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有一个机器编码无法存储结果,你认为这是正确的。