在做一些像$ price =(int)((0.1 + 0.7)*10)这样的事情时要采取什么预防措施; 得到7作为答案

nop*_*ole 0 floating-point integer

用PHP

echo (int) ( (0.1+0.7) * 10 );
Run Code Online (Sandbox Code Playgroud)

或者在Ruby中

p ((0.1+0.7) *10).to_i
Run Code Online (Sandbox Code Playgroud)

结果是7而不是8.可能真的很难抓住这些陷阱.我认为,如果在北美,它不是一个问题,因为我们计算价格高达多少美分,所以17.28美元或17.29美元可能不是一个问题.但在中国或香港这样的国家,价格可能只是一个整数.在这种情况下,如果我们的程序很慷慨,只是询问客户价格的整数部分,那么如果8变为7就会出现问题.所以也许我们总是需要小心并使用round()代替?任何其他方法避免这个陷阱?

Ste*_*ven 7

如果您想要准确的答案,请不要使用浮点数学.如果你总结价格使用定点算术.如果您的最小值为1美分,则将所有价格视为美分.