【发布时间】:2017-06-02 17:52:47
【问题描述】:
我需要将float 乘以100 才能将€ 转换为cents。我遇到的问题是,大数字的值没有正确计算。
例如:
String aa = "1000009.00";
aa = aa.replaceAll(",", ".");
float bb = Float.parseFloat(aa);
bb=Math.round(bb*100);
System.out.println(bb);
我得到的是:1.00000896E8
所以我知道这是因为 float 在 Java 中的工作方式。
我一直在寻找答案,但人们总是说“使用Math.round()”,这对我不起作用。
我能做些什么来防止这种情况发生?
【问题讨论】:
-
使用
double而不是float。 -
或者更好地使用
BigDecimal而不是float。 -
float有6 to 9 significant decimal digits precision,您的号码1000009.00是9 位数字。您已经超过了float的精度。请改用double(15–17 位)或BigDecimal(无限精度)。 -
一般来说,在 base10 中的精确小数很重要的计算中,不要使用浮点数(例如金钱),它会在某个时候咬你,特别是如果你不是 100% 确定并且精通浮点的详细工作原理。
标签: java floating-point multiplication floating-accuracy