为什么`intval(19.9*100)`等于`1989`?

Nat*_*man 11 php

男孩,这个真的很奇怪.我希望下面的代码可以打印1990,但它打印1989年!

$val = '$19.9';

$val = preg_replace('/[^\d.]/','',$val);
$val = intval($val * 100);

echo $val;
Run Code Online (Sandbox Code Playgroud)

为什么发生这种情况?

编辑:和这段代码:

$val = '$19.9';
$val = preg_replace('/[^\d.]/','',$val);
echo $val . "<br>";
$val = $val * 100;
echo $val . "<br>";
$val = intval($val);
echo $val;
Run Code Online (Sandbox Code Playgroud)

打印:

19.9
1990
1989
Run Code Online (Sandbox Code Playgroud)

为什么intval(1990)等于1989???

小智 17

这是PHP中浮点数固有的精度问题,以及许多其他语言.这个错误报告在铸造为int的上下文中讨论了一下:

http://bugs.php.net/bug.php?id=33731

试试吧round($val * 100).