【发布时间】:2017-07-14 16:51:23
【问题描述】:
我正在使用带有 HALF_UP 舍入模式的 DecimalFormat,我有一个无法正常工作的 escenery,我不知道为什么。
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);
【问题讨论】:
-
感谢您的评论,但我需要舍入,因为 HALF_UP 必须工作“舍入模式以向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下舍入。” Oracle Documentation
-
float和double无法精确存储值...参见:stackoverflow.com/q/3413448/4899193 -
这工作
System.out.println(df.format(0.5 * 1.05));- 当然是双打 -
我不认为....尝试打印出
tmp,例如System.out.println(""+tmp); -
根据下面的答案,
double就足够了,而float则不然。而tmp被声明为float....
标签: java rounding bigdecimal