调用一个应返回带有精确小数位数的浮点数的方法后的奇怪结果

时间:2014-04-04 10:45:23

标签: java floating-point floating-accuracy floating-point-precision

我调用以下方法来转换正文中指示的输入:

public static double convertFromHectareAreCentiareToHectare(int hectare, int are, int centiare){
            double d;
            DecimalFormat df = new DecimalFormat("######.####");
            d = Double.valueOf(df.format((hectare*10000+ are * 100 + centiare)/10000));
            return d;
        }

    }  

当我用以下方法调用此方法时:

convertFromHectareAreCentiareToHectare(1, 90, 90)

我得到:1.0

但我通常应该1.9090 我的代码有什么问题?

编辑:

将10000更改为10000.0后,我遇到以下异常:

    Exception in thread "main" java.lang.NumberFormatException: For input string: "1,909"
        at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
        at java.lang.Double.valueOf(Unknown Source)
        at ma.ancfcc.Utilities.Convert.convertFromHectareAreCentiareToHectare(Convert.java:21)
        at ma.ancfcc.Utilities.Convert.main(Convert.java:8)

1 个答案:

答案 0 :(得分:1)

doublefloat号码只能在小数点分隔符后转换为String时格式化为具有给定的位数。您可以强制执行数字的小数精度,只执行它们的字符串表示 附:不要使用double来处理固定的精度计算。将数字转换为long并处理最小单位的整数 即如果你想用毫克精度处理重量,用毫克作为计算单位,这样1.5千克就会变成1,500,000(毫克)。