【问题标题】:PHP Type Casting to integerPHP类型转换为整数
【发布时间】:2016-06-26 06:36:28
【问题描述】:

谁能解释一下这段代码的逻辑?

<?php
 echo ((0.1 + 0.7) * 10) .'<br />';    // 8
 echo (int) ((0.1 + 0.7) * 10) .'<br />'; // 7 why?

 echo ((0.1 + 0.8) * 10) .'<br />'; // 9
 echo (int) ((0.1 + 0.8) * 10) .'<br />'; // 9 why ??
?>

【问题讨论】:

    标签: php casting int


    【解决方案1】:

    来自手册:http://php.net/manual/en/language.types.float.php

    警告 浮点精度

    浮点数的精度有限。尽管取决于系统,但 PHP 通常使用 IEEE 754 双精度格式,由于在 1.11e-16 的数量级四舍五入,这将给出最大的相对误差。非初等算术运算可能会产生更大的误差,当然,当多个运算复合时,必须考虑误差传播。 此外,可以精确表示为以 10 为底的浮点数的有理数,如 0.1 或 0.7,没有精确表示为以 2 为底的浮点数,无论尾数大小如何,它都在内部使用。因此,它们不能被转换成它们内部的二进制对应物,而不会有小的精度损失。这可能会导致令人困惑的结果:例如, floor((0.1+0.7)*10) 通常会返回 7 而不是预期的 8,因为内部表示将类似于 7.9999999999999991118...。 所以永远不要相信浮点数结果到最后一位,也不要直接比较浮点数是否相等。如果需要更高的精度,可以使用任意精度的数学函数和 gmp 函数。 有关“简单”的解释,请参阅标题为 "Why don’t my numbers add up?"的 » 浮点指南

    【讨论】:

      【解决方案2】:

      如果我们将 浮点数转换为整数,那么输出将是小数点前的数字。表示如果我们将10.9 转换为整数,那么输出将为10

      您还应该参考这些函数 ceil()floor()round()

      更多详情,请参阅下面的链接,

      PHP unexpected result of float to int type cast

      希望对你有帮助:-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 2020-12-29
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多