2012-02-24 80 views
0

我正在研究一个程序,您可以选择最多3个要分配其中的东西。为什么小数点不正确?

举例说,一个动作使你获得4分,而这4分在你选择的3件事中分配。

在这种情况下,这3件事每个得到1.33333 ...点。

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

但是,当我把它们带出来的时候,它会达到3.99。

可以理解。

但是,如何避免这一点,而不给予1.34点的东西之一?

+0

取整?你没有清楚地解释你想怎么做,这取决于你。这不是一个编码问题。 – 2012-02-24 05:40:37

+0

为什么你不能总计? – 2012-02-24 05:41:03

+0

您也可以将总数缓存在数据库中,因此,不要将累加值累加起来,只需查看记录 – 2012-02-24 05:41:07

回答

5

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

浮点值是计算的烦人的叔叔。让他们成为他们自己,然后在向公众展示时将其清理干净。

+3

“浮点值是计算的烦人的叔叔,只要让它们成为他们自己的东西,然后清理它们即可当向公众介绍时“。 - 这是一个奇妙的报价,我一定会偷窃 – 2012-02-24 05:50:01

+0

特朗克或*轮*,我应该说,在适当的情况下。 – QED 2012-02-24 17:17:47

0

使用第三位小数 - 不用于显示,但仅用于跟踪精度。如果有人将3分中的4分,则将其存储为1.333。当你计算回来时,你会得到3.999,你四舍五入到4.另一方面,如果有人将3.99分为三个对象,将其存储为1.33,所以当你计算回来时,得到3.99(而不是3.999),因此你不知道收集。

2

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