PHP 果然是世界上最好的语言,再也不相信 var_dump() 了

2015-01-21 17:06:34 +08:00
 laoyuan
<?php
$a = 57; //或者 $a = ‘57’;
$b = '0.57' * 100;
$c = round('0.57' * 100);
var_dump( $b, $c, $a == $b, $a == $c);
?>

float(57)
float(57)
bool(false)
bool(true)

谁能解释为什么加 round 就 true 了?PHP Version 5.5.20
5667 次点击
所在节点    PHP
44 条回复
laoyuan
2015-02-08 19:07:08 +08:00
@huson 重点是 round
huson
2015-02-08 19:20:03 +08:00
@laoyuan
http://php.net/manual/en/language.types.float.php#warn.float-precision
这页有讲 栗子在下面


$x = 8 - 6.4; // which is equal to 1.6
$y = 1.6;
var_dump($x == $y); // is not true

PHP thinks that 1.6 (coming from a difference) is not equal to 1.6. To make it work, use round()

var_dump(round($x, 2) == round($y, 2)); // this is true

This happens probably because $x is not really 1.6, but 1.599999.. and var_dump shows it to you as being 1.6.
laoyuan
2015-02-08 19:30:38 +08:00
@huson 哎呀坑爹啊,我看的中文版手册倒是带评论,但不是按投票排序的,所以评论都略过了!
bombless
2015-02-22 23:49:44 +08:00
@Kilerd 在C语言中这叫promotion,在此处是不需要区分单精度和双精度的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/164207

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX