java双精度 [英] java double precision

查看:137
本文介绍了java双精度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


可能重复:

浮点精度






  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆