我正在使用带有HALF_UP舍入模式的DecimalFormat,并且我有一个escenery,其中的工作不正常,我不知道为什么。Java DecimalFormat HALF_UP舍入错误
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.HALF_UP);
float tmp = (float) (0.5 * 1.05);
df.format(tmp);
float mul = Float.parseFloat(df.format(tmp));
变量值mul
我希望有0.53的值,我收到了0.52的值。
我正在使用Java 1.8.0_131。
解决的最终代码
BigDecimal mul = new BigDecimal(0.5).multiply(new igDecimal(1.05));
mul = mul.setScale(2, RoundingMode.HALF_UP);
System.out.println(mul);
Thank you for your comment,but I round rounding as HALF_UP must works“Rounding mode to round to”nearest neighbor“,除非两个邻居是等距离的,在这种情况下,四舍五入。“[Oracle Documentation](https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html) –
'float'和'double'无法精确地存储值...请参阅:https ://stackoverflow.com/q/3413448/4899193 –
This works' System.out.println(df.format(0.5 * 1.05));' - 当然双打 –