1

我试图理解在 PHP 中从 float 转换为 int ,并遇到以下代码:

echo (int) ( (0.1+0.7) * 10 ); // echoes 7!

我的问题是为什么它回显 7 而不是 8?其背后的逻辑是什么?

4

3 回答 3

1

这里:

$var = (int) $othervar;

我猜:

$var = int($othervar);

也可以。但事实并非如此!

gettype()会告诉你类型,get_class()会告诉你对象的类,两者都返回字符串,get_class()如果没有提供参数或 null 则返回当前类,如果你提供非对象给get_class()它是某种错误。

这些函数是 php 有多糟糕的一个例子,gettype()而且get_class(),有趣的事实是,因为你必须玩“猜测哪个有下划线”,你也有is_a()(函数、期望$var和“类型名”)和instanceof(运算符)。

相反,它是:

$var = intval($othervar);

还有floatval,整个地段都有 val 追随他们!更多的 PHP 愚蠢。

注意:

$var = (string) $othervar;

调用$othervar's __toString()方法,但没有__toInt()方法,只有字符串。

希望这可以帮助。

附录:

整数总是被截断,因此是 7。

其他附录:

如果您想要更多受控的转换,您可以使用 round() ,它可以按预期工作,floor()(向下舍入,因此 7 减去 x 8 层到 7,-3 减去 x 减去 2 层到 -3)并且ceil()向上舍入(减少 7 x 减少 8 ceils 到 8,减少 -3 x 减少 -2 ceils 到 -2)

这个问题是一个几乎完全相同的副本:

为什么 PHP 会将 (int) ((0.1+0.7)*10) 的结果转换为 7,而不是 8?

甚至是例子!

于 2013-08-24T01:46:05.593 回答
0

因为存储在内存中的实际值类似于 7.999999999999999999999999 ,这是由舍入误差引起的。

于 2013-08-24T01:43:58.360 回答
0

你也可以使用intval()

$float = 7.99999999999999999999999999999999;
$int = intval($float);

echo $int;
于 2013-08-24T02:00:26.020 回答