【问题标题】:Why are the decimals not adding up correctly?为什么小数加起来不正确?
【发布时间】:2012-02-24 05:38:09
【问题描述】:

我正在开发一个程序,您可以在其中选择最多 3 个您想要分配积分的事物。

例如,假设一个动作为您获得 4 分,而这 4 分将分配给您选择的 3 件事。

在这种情况下,这 3 样东西各得 1.33333... 分。

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

但是,当我把它们拿出来时,它的总数达到了 3.99。

可以理解。

但是如果不给其中一件事 1.34 分,我怎么能避免这种情况呢?

【问题讨论】:

  • 四舍五入?你还没有清楚地解释你想如何做到这一点,这取决于你。这不是编码问题。
  • 你为什么不能直接取整?
  • 您也可以将总数缓存在数据库中,因此无需添加计数,只需查找计数即可

标签: php floating-point decimal


【解决方案1】:

将完整的浮点数/双精度数存储在数据库中,而不是截断到小数点后 2 位。截断时间是在向用户显示值时 -- 但只截断显示的字符串,而不是实际值

浮点值是计算中令人讨厌的醉酒叔叔。让它们保持原样,然后在向公众展示时将它们清理干净。

【讨论】:

  • “浮点值是计算中令人讨厌的醉酒叔叔。让它们保持原样,然后在向公众展示时清理它们。” - 这是一个很棒的报价,我一定会偷走
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    使用第三个小数位 - 不是为了显示,而只是为了跟踪精度。如果有人将 4 个点除以三点,则将其存储为 1.333。当你计算回来时,你得到 3.999,你四舍五入到 4。另一方面,如果有人将 3.99 除以三个对象,则将其存储为 1.33,所以当你计算回来时,你得到 3.99(而不是 3.999),因此你知道不要四舍五入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2021-06-13
      • 2023-01-27
      • 1970-01-01
      相关资源
      最近更新 更多