`

PHP浮点数比较不准

PHP 
阅读更多

首先看一段代码:

<?php
$a = 0.1;
$b = 0.7;
var_dump(($a + $b) == 0.8);

打印出来的值居然为 boolean false

这是为啥?PHP手册对于浮点数有以下警告信息:

Warning
浮点数精度
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。

这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数

那么上面的算式我们应该改写为

<?php
$a = 0.1;
$b = 0.7;
var_dump(bcadd($a,$b,2) == 0.8);

这样就能解决浮点数的计算问题了

分享到:
评论

相关推荐

    S7-200SMART_浮点数比较库文件.rar

    标题中的"S7-200SMART_浮点数比较库文件.rar"暗示了这是一个与西门子S7-200SMART系列PLC相关的程序库,主要用于浮点数的比较操作。S7-200SMART是西门子推出的一款小型PLC,广泛应用于自动化设备控制,具有编程灵活、...

    浮点数比较错误.vi

    浮点数比较错误

    php 浮点数比较方法详解

    在PHP编程中,浮点数比较是一个常见的挑战,因为浮点数运算存在精度问题。这是因为计算机内部使用二进制表示浮点数,而某些十进制小数在转换为二进制时无法精确表示,导致计算后可能出现微小的误差。这种误差在比较...

    浮点数比较大小.c

    浮点数比较大小.c

    消除浮点数比较错误.vi

    消除浮点数比较错误

    SMART库_精确浮点数比较real compare.smartlib.rar

    标题 "SMART库_精确浮点数比较real compare.smartlib.rar" 暗示了这是一个针对S7-200 SMART PLC(西门子小型可编程控制器)的智能库,专门用于进行浮点数的精确比较操作。这个库可能包含了一系列的函数块或子程序,...

    浮点数(单精度浮点数,双精度浮点数)

    浮点数(单精度浮点数,双精度浮点数) 浮点数是一种数字表示方法,用于近似表示任意实数。在计算机中,浮点数由一个整数或定点数(即尾数)乘以某个基数(通常是 2)的整数次幂得到。这种表示方法类似于基数为 10 ...

    单片机浮点数设计 单片机浮点数设计

    单片机浮点数设计是嵌入式系统开发中的一个重要环节,特别是在资源有限的环境中,如微控制器(MCU)等。浮点数运算在科学计算、传感器数据处理以及复杂算法实现等方面扮演着关键角色。然而,传统的单片机往往不直接...

    三菱PLC浮点数运算指令

    在三菱PLC中,浮点数运算指令能够处理32位的浮点数,并进行比较、变换、四则运算、开方运算以及三角函数运算等。 首先,要了解三菱PLC中的浮点数运算指令,需要明白PLC是如何处理浮点数的。浮点数是一种数值表示...

    近似:近似浮点数相等比较和断言

    在编程领域,尤其是在涉及到数值计算和科学计算时,浮点数的近似比较是一个非常重要的概念。浮点数由于其二进制表示的特性,直接使用等于(==)操作符进行比较往往得不到预期的结果,因此我们需要使用特定的方法来...

    浮点数的数据结构.pdf

    在进行浮点数比较或运算时,开发者需要考虑精度问题,并可能需要使用特定的方法(如`Math.abs()`或自定义比较函数)来处理潜在的不精确性。此外,了解浮点数的二进制转换规则有助于调试和理解浮点运算的底层机制。

    双精度浮点数转换

    在计算机科学中,浮点数是一种用于表示数值的近似方式,主要分为单精度浮点数和双精度浮点数。这些数据类型广泛应用于各种计算,特别是在需要处理大量精确度和范围的数学运算中,例如科学计算、图像处理和游戏开发。...

    十六进制转浮点数,十六进制转浮点数在线,LabView

    本文将深入探讨十六进制到浮点数的转换,特别是在LabVIEW环境下的实现。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器公司(NI)开发的一种图形化编程语言,广泛应用于工程、...

    Shell脚本处理浮点数的运算和比较实例

    在Shell脚本中处理浮点数的运算和比较是一个常见的需求,尤其是在自动化任务和系统监控中。由于Bash shell本身并不支持浮点数运算,因此我们需要借助其他工具,如`bc`和`awk`。 `bc`是一个任意精度的计算器语言,它...

    64位浮点数与32位整数或32位浮点数之间的相互转换(V17版本仅限1500系列PLC使用).zip

    此外,当涉及到32位整数和32位浮点数之间的转换时,整数转浮点数时可能会因为浮点数的精度而产生非预期的结果,而浮点数转整数时可能因四舍五入规则产生误差。因此,在编写程序时,应充分考虑这些潜在问题,并进行...

    float_2_char.zip_C51 float转char_单片机 浮点数_浮点数 char_浮点数 转换_浮点数转换

    `float_2_char.zip` 提供的代码着重解决了单片机中浮点数(`float`)与字符型(`char`)之间的转换问题,这对于节省存储空间、提高通信效率以及降低错误率非常有用。下面将详细介绍浮点数与字符型之间的转换原理和...

    4.15实验-浮点数的表示及运算

    此外,浮点数比较也不总是准确的,因为两个看似相等的浮点数在二进制下可能有所不同,因此比较时需注意精度问题。 四、浮点数运算的性能优化 在实际应用中,理解和优化浮点数运算的性能至关重要。处理器通常具有...

    TMS320C3x浮点数简介、IEEE754的32位转VC33的32位浮点数算法、IEEE754的64位浮点数转VC33的40位浮点数算法

    在数字信号处理领域,浮点数运算在许多高级计算任务中扮演着重要角色。TMS320C3x是一款由德州仪器(TI)推出的数字信号处理器(DSP),它支持浮点运算,使得复杂的数学计算得以高效执行。本文将深入探讨TMS320C3x中...

Global site tag (gtag.js) - Google Analytics