|
场景
PHP里两个相等的float类型的数字相减不等于0,而等于3.5527136788005E-15
原因
作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所
以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两
个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机
内部处理浮点数的问题!在C、JAVA 等语言中也会遇到同样的问
题。
解决方案
现有两个变量:amt,namt都是通过运算后保留2位小数的float数字。将其中一项设为string类型即可
$data = array(
array('amt' => 8.1, 'namt' => 8.1),
array('amt' => 16.2, 'namt' => 16.2),
array('amt' => 24.3, 'namt' => 24.3),
);
foreach($data as $value)
{
echo ($value[&#39;amt&#39;] - $value[&#39;namt&#39;]).&#39;<br/>&#39;;
//输出结果:
/*
* 0 (8.1-8.1的结果)
* 0 (16.2-16.2的结果)
* 4.5474735088646E-15 (24.3-24.3的结果)
*/
//正解:
echo ($value[&#39;amt&#39;] - &#34;{$value[&#39;namt&#39;]}&#34;).&#39;<br/>&#39;;
//此时,所有输出都是0
} |
|