在php中从float转换为Int

时间:2013-08-24 01:41:19

标签: php

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

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

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

3 个答案:

答案 0 :(得分:1)

这里:

$var = (int) $othervar;

我猜:

$var = int($othervar);

也会奏效。但它没有!

gettype()会告诉你类型,get_class()将告诉你一个对象的类,两个返回字符串,get_class()如果没有提供参数或null,则返回当前类,如果你向get_class()提供了一个非对象,这是一种错误。

这些函数是php,gettype()get_class()多么糟糕的一个例子,有趣的事实,因为你必须玩“猜有哪个有下划线”你也有is_a()(函数) ,期望$var和“typename”)和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个细胞到8,3减少x减去-2细胞到-2)

这个问题几乎完全是:

Why would on earth PHP convert the result of (int) ((0.1+0.7)*10) to 7, not 8?

即便如此!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您也可以使用intval()

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

echo $int;