我得到的输出如下:
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;
}