Java 精确数学计算
我有一个问题,我正在开发一个应用程序,应该能够做一些数学计算。这些计算必须精确,或者说没有明显的错误 但是这个简单的代码Java 精确数学计算,java,android,Java,Android,我有一个问题,我正在开发一个应用程序,应该能够做一些数学计算。这些计算必须精确,或者说没有明显的错误 但是这个简单的代码 double a = 3.048d; double b = 1000d; double c = a / b; 给我一个错误的结果,c不是预期的0.003048,而是0.00304800000000004,这显然是错误的 double d = 3.048 / 1000; 第二个代码snipet给出了正确的结果 我知道当用计算机计算时,所有浮点运算都不精确,但我不知道如何
double a = 3.048d;
double b = 1000d;
double c = a / b;
给我一个错误的结果,c不是预期的0.003048,而是0.00304800000000004,这显然是错误的
double d = 3.048 / 1000;
第二个代码snipet给出了正确的结果
我知道当用计算机计算时,所有浮点运算都不精确,但我不知道如何解决这个问题
提前谢谢!
路德维希
发展:
-安卓2.2
测试设备:
-HTC Desire使用a进行精确的浮点计算。通过设置比例,您可以精确地指定要输出的距离
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的机器编码无法存储结果,您认为这是正确的。准确感知所需的是对象:
这是错误的结果,而不是错误。要处理它,请将结果四舍五入到适当的精度 嘿,johncarl,非常感谢你在创建新的BigDecimal时用字符串给出的提示。我想这可能是我以前使用BigDecimal时遇到的问题。我不知道你以前指的是什么问题,但你也可以将3.048表示为:BigDecimal a=new BigDecimal3048.dividenew BigDecimal1000
BigDecimal a = new BigDecimal("3.048");
BigDecimal b = new BigDecimal(1000);
BigDecimal c = a.divide(b);
System.out.println(c); //0.003048