错误的Java十进制,因此错误的计算



我得到的输出如下:

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??

谁来帮我一下><</p>

谢谢:)

不要使用浮点数进行货币计算——使用十进制类!

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

对于像货币这样的固定小数,浮点运算是邪恶的。只需使用整数并格式化输出,以便您有两个数字与.分开,这将为您节省很多麻烦。

如果你真的想保持浮点数,你应该在四舍五入和乘法/除法上做一些技巧,这样你就可以在打印时做同样的四舍五入,例如:

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

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

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

最新更新