我最近正在开发一个基于flex 3的结账系统,订单总数对我来说没有意义。我正在添加小计,运费和税金。所有这三个值都四舍五入到小数点后两位,但我的答案似乎根本没有四舍五入。
在查看发生的事情之后,我发现每当你添加.95和.15而不是获得1.1时你会得到1.09999999重复。从它的变化开始并没有什么区别,在我原来的情况下它是(17.95 + 5 + 1.15)。 Flex给了我24.09999。
这有什么理由吗?我可以再次对最终数字进行舍入并获得正确的结果,但这种基本算法错误似乎很奇怪。感谢。
答案 0 :(得分:0)
由于计算机处理浮点数的方式,它们通常非常接近,但输入的值不完全相同。该数字必须符合固定的位数,因此在空间折衷时会丢失一些分辨率。这是计算机的限制,而不是flex。
一个相当简单的解释
http://joshblog.net/2007/01/30/flash-floating-point-number-errors/
更深入的解释
https://en.wikipedia.org/wiki/Floating_point