IE盒子

搜索
查看: 112|回复: 0

PHP里两个相等的float类型的数字相减不等于0,而等于3. ...

[复制链接]

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2023-3-6 04:17:33 | 显示全部楼层 |阅读模式
场景

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['amt'] - $value['namt']).'<br/>';
            //输出结果:
            /*
             * 0 (8.1-8.1的结果)
             * 0 (16.2-16.2的结果)
             * 4.5474735088646E-15 (24.3-24.3的结果)
             */

            //正解:
            echo ($value['amt'] - "{$value['namt']}").'<br/>';
            //此时,所有输出都是0
        }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表