PHP 类型转换为整数


PHP Type Casting to integer

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

<?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 ??
?>

如果我们将浮点数转换为整数,则输出将是小数点数之前的数字。意味着如果我们10.9转换为整数,则输出将10

您还应该引用这些函数 ceil()、floor() 和 round()。

有关更多详细信息,请参阅以下链接,

浮点到整数类型转换的 PHP 意外结果

希望对您有所帮助:-)

来自手册: 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.99999999999999999991118....所以永远不要相信浮点数结果到最后一位,也不要直接比较浮点数的相等性。如果需要更高的精度,可以使用任意精度的数学函数和 gmp 函数。有关"简单"的解释,请参阅» 浮点指南,该指南的标题也是"为什么我的数字不加起来?