java双精度 [英] java double precision
问题描述
可能重复:
浮点精度
double a = 0.000001,b = 50000;
b = a * b;
System.out.println(double:+ b); // - > double:0.049999999999999996
float a = 0.000001f,b = 50000;
b = a * b;
System.out.println(float+ b); // - > float0.05
我在代码的大部分部分都使用了double,今天我发现这个问题。
我该如何处理这个问题?
$ p
$ b $ pre $ 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);
o / p: - > bInMilliGram:49.99999999999999,pickedVal:25.0
如果您需要任意好的精确度,请使用 java.math.BigDecimal
类。
Possible Duplicate:
Precision of Floating Point
double a=0.000001,b=50000;
b=a*b;
System.out.println("double:"+b); // -> double:0.049999999999999996
float a=0.000001f,b=50000;
b=a*b;
System.out.println("float"+b); // -> float0.05
I have used double in most part of my code and today I found this problem. How should I handle this?
Context:
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);
o/p: -> bInMilliGram:49.99999999999999, pickedVal:25.0
If you need arbitrarily good precision, use the java.math.BigDecimal
class.
这篇关于java双精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!