我得到的输出是这样的:
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 ??
有人请帮我这个><
谢谢你:)
答案 0 :(得分:3)
请勿使用浮点数进行货币计算 - 请使用decimal classes!
答案 1 :(得分:1)
您可能需要考虑切换到BigDecimal
类。 setScale(int newScale, RoundingMode roundingMode)函数可以让您完全控制小数位。
答案 2 :(得分:0)
对于固定小数,浮点运算是邪恶的,就像货币中的一个。只需使用整数并格式化输出,这样就可以用.
分隔2个数字,这样可以省去很多麻烦。
如果你真的想要保留浮点数,你应该做一些舍入和乘法/除法的技巧,这样你实际上可以通过打印完成相同的舍入,例如:
答案 3 :(得分:0)
由于您不必使用其他库类,您仍然可以实现自己的舍入方法。
public static float round(float val) {
return (val*100.0 + 0.5) / 100.0;
}
在将值用于后续操作之前对其进行舍入。