10 进制小数计算机内部无法用二进制的小数来精确的表达.
$a = 0.1;
$b = 0.7;
$c = intval(($a + $b) * 10);
echo $c;
//output: 7
(19.6*100) != 1960
gettype(19.6*100)
returns 'double', 但是 (19.6*100) !== (double)1960
19.6*100
没有手动就无法与任何类型进行比较,应该首先将其转化为其他类型:
(string)(19.6*100) == 1960
$a = '17.9';
$b = intval($a*100);
echo $b;
// output: 1789
可以用 round()
或 (string)
解决,最好还是使用 BCMath 的方法
数据库存成浮点数,PHP 取出来会转换成浮点数,会影响之后的计算。 另外数据库的聚合函数也会不按预期工作:
// distance FLOAT 类型,5条记录的值分别为:40.2, 40, 40, 40
select sum(distance) from entry_results;
// 200.0200004577637