错误的java小数,因此错误的计算

时间:2011-10-28 03:48:54

标签: java decimal

我得到的输出是这样的:

number of bags ordered : 43 ($236.50)

discount : 5% ($11.83)

total cost : $224.68

正确的总费用应为224.67,因为236.50 - 11.83 = 224.67

我使用%.2f获得的折扣显示11.83,原始值为11.825

total cost = bags ordered - discount

224.68 != 236.50 - 11.825 = 224.675

只是因为我得到了一个汇总值,我不想224.68而是224.67

如何确保它是236.50-11.83 = 224.67而不是236.50-11.825 = 224.675 ??

有人请帮我这个><

谢谢你:)

4 个答案:

答案 0 :(得分:3)

请勿使用浮点数进行货币计算 - 请使用decimal classes

答案 1 :(得分:1)

您可能需要考虑切换到BigDecimal类。 setScale(int newScale, RoundingMode roundingMode)函数可以让您完全控制小数位。

答案 2 :(得分:0)

对于固定小数,浮点运算是邪恶的,就像货币中的一个。只需使用整数并格式化输出,这样就可以用.分隔2个数字,这样可以省去很多麻烦。

如果你真的想要保留浮点数,你应该做一些舍入和乘法/除法的技巧,这样你实际上可以通过打印完成相同的舍入,例如:

  • 11.825 * 100 = 1182.5
  • Math.round(1182.5)= 1183
  • 1183/100 = 11.83

答案 3 :(得分:0)

由于您不必使用其他库类,您仍然可以实现自己的舍入方法。

public static float round(float val) {
   return (val*100.0 + 0.5) / 100.0;
}

在将值用于后续操作之前对其进行舍入。