Heim  >  Artikel  >  Backend-Entwicklung  >  php整型转换错误?

php整型转换错误?

WBOY
WBOYOriginal
2016-08-04 09:20:46889Durchsuche

$a = 16.4 *100;
echo $a;
echo "
";
echo intval($a);
echo "
";
php整型转换错误?

哪位高人指点一下?

回复内容:

$a = 16.4 *100;
echo $a;
echo "
";
echo intval($a);
echo "
";
php整型转换错误?

哪位高人指点一下?

SF的类似问题
鸟哥对于PHP int与float的解释

16.4在机器内部是16.399999.........
16.399999*100 = 16.399999。intval把尾数直接去掉了

<code class="php">echo "
";</code>

让我震惊了

<code class="php">$a = 16.4 *100;
echo $a.PHP_EOL;
echo intval($a).PHP_EOL;//用PHP_EOL不是挺好</code>

其实我觉得这算是PHP的一个bug,不过注意一点就过去了。
PHP的整数处理有四舍五入,向下取整,向上取整,前面 @letter慕 已经解释了,二进制没有16.4,只能近似,所以16.4*100并不是1640,而是1639.99999999999999999999999。具体它内部做了什么处理就不知道,但是能通过简单的测试发现,PHP在整形转换的时候是向下取整,而不是四舍五入。

<code>$a = 16.4 * 100; //其实很多小数都有类似问题,也不限于PHP
echo (string) $a . "\n";
echo (int) $a . "\n";
echo floor($a) . "\n";
echo ceil($a) . "\n";
echo (int)(string) $a . "\n";</code>

intval函数问题 可以先strval再转int

<code>echo intval(strval(16.4 *100));  // 1640</code>

对啦 你的换行方式让我眼前一亮,感觉像打开了新世界的大门23333

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn