【问题标题】:Do not understand how this simple php code works [duplicate]不明白这个简单的php代码是如何工作的[重复]
【发布时间】:2012-07-09 20:22:38
【问题描述】:

可能重复:
PHP Math Precision

以下 php 代码输出 7,但我期望为 8。为什么不同?

<?php echo (int)((0.1+0.7)*10); ?>

【问题讨论】:

标签: php


【解决方案1】:

由于浮点表示不准确,0.1+0.7 并不完全等于 0.8。它可能比这少一些。当你使用int(..) 时,它会将其截断为 7。

【讨论】:

  • 知道如何规避这个问题吗?
  • 要绕过它,使用 bcmath - uk.php.net/manual/en/book.bc.php - gmp - uk.php.net/manual/en/book.gmp.php - 或类似的,或者使用适当的舍入而不是简单地转换为 int
  • 看起来这样可行:(int)(string)((0.1+0.7)*10); 但它不是一个通用的解决方案。
  • 好的,谢谢。我也想过乘以 10,四舍五入,除以 10,然后继续做任何事情,但无论如何,错误可能仍然存在。
  • @MartinsBriedis:尝试对printf(..) 执行相同的操作,并使用更高的小数精度。 Arik-so:答案是总有更好的方法,这取决于你想做什么。
【解决方案2】:

其他人已经指出了问题。如果您使用固定的小数位数(例如,在使用货币时),您最好计算和存储美分,然后在向用户显示值时将它们转换回美元/欧元/任何值。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2013-08-16
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多