我调用以下方法来转换正文中指示的输入:
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)
答案 0 :(得分:1)
double
或float
号码只能在小数点分隔符后转换为String
时格式化为具有给定的位数。您可以不强制执行数字的小数精度,只执行它们的字符串表示
附:不要使用double
来处理固定的精度计算。将数字转换为long
并处理最小单位的整数
即如果你想用毫克精度处理重量,用毫克作为计算单位,这样1.5千克就会变成1,500,000(毫克)。