为什么小数没有正确加起来?

时间:2012-02-24 05:38:10

标签: php floating-point decimal

我正在开发一个程序,您可以在其中选择最多3项要分配的内容。

比如说一个动作可以获得4分,并且在你选择的3件事中,这4分被分配。

在这种情况下,这三件事各得1.33333 ......分。

在我的数据库中,它们存储为1.33。

然而,当我把它们拿出来时,它最高可达3.99。

可以理解的。

但是如果不给出1.34分之一的话,我怎么能避免这种情况?

3 个答案:

答案 0 :(得分:5)

将完整的float / double存储在数据库中,而不是截断到2个小数位。截断的时间是向用户显示值 - 但仅截断显示的字符串,而不是实际值

浮点值是计算的醉酒叔叔。只要让它们成为现实,然后在向公众展示时清理它们。

答案 1 :(得分:2)

在这种情况下,浮点数将是有损的。如果您正在处理整数分子和分母,为什么不将数字存储为分数?您可以使用Pear's Math Fraction library或自己写一些东西。

答案 2 :(得分:0)

使用小数点后三位 - 不显示,但仅用于跟踪精度。如果有人将3分分为3分,则将其存储为1.333。当你计算回来时,你会得到3.999,你可以得到4个。另一方面,如果有人在三个对象中划分3.99,则将其存储为1.33,所以当你计算回来时,得到3.99(而不是3.999)因此你知道不要围捕。