java双精度
可能重复:java双精度,java,floating-point,Java,Floating Point,可能重复: 我在大部分代码中使用了double,今天我发现了这个问题。 我该怎么处理 背景: double []refValues= {100,75,50,25,15,5,1}; double bInMilliGram=b*1000; double pickedVal=0; for(double ref:refValues) if(ref<=bInMilliGram) {
我在大部分代码中使用了double,今天我发现了这个问题。 我该怎么处理 背景:
double []refValues= {100,75,50,25,15,5,1};
double bInMilliGram=b*1000;
double pickedVal=0;
for(double ref:refValues)
if(ref<=bInMilliGram) {
pickedVal=ref;
break;
}
System.out.println("bInMilliGram:"+bInMilliGram+", pickedVal:"+pickedVal);
double[]refValues={100,75,50,25,15,5,1};
双毫克=b*1000;
双重选取值=0;
用于(双参考:参考值)
如果(参考Binmiligram:49.99999999999,pickedVal:25.0如果您需要任意好的精度,请使用java.math.BigDecimal
类。这不是问题。这是double的工作方式。您不必处理和关心它。double的精度就足够了。想想,您的数字和预期结果之间的差异是在小数点后的19位
从这一事实得出的唯一结论是,永远不要尝试使用=
比较浮点值-结果可能会令人困惑。这是浮点类型的预期行为:
double []refValues= {100,75,50,25,15,5,1};
double bInMilliGram=b*1000;
double pickedVal=0;
for(double ref:refValues)
if(ref<=bInMilliGram) {
pickedVal=ref;
break;
}
System.out.println("bInMilliGram:"+bInMilliGram+", pickedVal:"+pickedVal);