php JS 这类解释型语言都会有浮点数精确问题。。。
最近在做一个钱的相加减问题是,出现了浮点运算不准的情况,看来都说解释型语言对于浮点运算都会有问题的说法是真的。
首先看一段代码:
<?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);
这样就能解决浮点数的计算问题了
具体php官方的 方法
http://cn2.php.net/manual/en/book.bc.php
分享到:
相关推荐
在编程领域,尤其是在C#语言中,数据类型转换是一项基础且重要的任务。有时我们需要将不同格式的数据进行相互转换,例如将十六进制数字转换为浮点数。在C#中,这种转换通常涉及到字符串解析、位操作以及浮点数表示的...
以下是对这个任务的详细解释: 首先,我们需要知道浮点数在计算机中的存储方式。在C语言中,标准定义了两种浮点数类型:`float`和`double`。`float`通常占用4字节(32位),`double`占用8字节(64位)。它们使用...
C语言作为一种广泛使用的编程语言,在处理浮点数时,其内部机制遵循国际标准IEEE 754。该标准定义了浮点数在计算机内部的二进制存储方式,使得不同系统和平台能够就浮点运算达成一致。 IEEE 754标准规定,一个...
这个问题在许多解释型语言中都存在,并非PHP独有。 例如,当你尝试执行以下代码: ```php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8); ``` 你可能会惊讶地发现输出是`boolean false`。这是因为0.1和0.7在二...
在Java编程语言中,将16进制的4字节数据转换为浮点数是常见的数据处理操作,尤其是在与硬件设备交互或者进行低级通信时。这个过程涉及到字节顺序的理解,以及Java中的数据类型转换。以下是关于这个主题的详细解释。 ...
5. 解释型语言:Python 语言是一种解释型语言,代码不需要编译直接执行。 6. 面向对象程序设计思想:Python 语言全面支持面向对象程序设计思想。 7. 高可扩展性:Python 语言具有高可扩展性,易于扩展和修改。 8. ...
* 解释型语言:Python 是一种解释型语言,不需要编译。 * 跨平台:Python 可以在多种平台上运行,包括 Windows、Linux 和 MacOS。 2. 变量和内建数据类型 Python 中的变量不需要声明,变量名是大小写敏感的。...
学习和理解这个转换过程对于深入理解计算机内部如何存储和处理浮点数非常重要,特别是对于进行跨语言数据交换或进行低级别计算的程序员来说。`float_hex_dec.asv`文件可能包含了实际运行这个转换的示例或者测试数据...
Python 是一种动态类型的解释型语言,具有以下特点: 1. Python 解释器本身几乎可以在所有的操作系统中运行。 2. Python 本身设计为可扩展的,并非所有的特性和功能都集成到语言核心之中。 3. Python 提供了丰富的 ...
尽管如此,MATLAB的运行速度相对较慢,因为它是解释型语言,执行效率低于编译型语言。 MATLAB的主要特点包括: 1. 高编程效率:MATLAB允许以数学表达式的形式编写程序,特别适合科学与工程计算,矩阵运算和复数运算...
Python属于解释型语言,它提供了交互式和文件式的编写运行方式。在交互式模式中,输入即刻得到结果,适合语法练习;而在文件式中,一组语句构成的程序被整体执行,是主要的编程形式。 接着,课程介绍了Python开发...
Java语言是一种现代高级语言,它具有强类型、编译和解释、自动垃圾回收、面向对象、平台无关、安全性、分布式计算和多线程等特点。下面是Java语言的基础知识点总结: 一、Java语言的特点 * 强类型:Java语言是一个...
源码可能包含了C、C++、Python或其他语言中的函数,用于进行浮点数的解析、格式化、比较和算术运算。这些函数通常会涉及到位操作,以匹配IEEE 754的标准格式。 "Pudn.txt"文件可能是文档或笔记,提供了对源码的...
Python是一种解释型语言,意味着代码在运行时逐行被解释并执行,而不是像编译型语言那样在执行前先完全编译成机器码。这使得Python具有很高的开发速度,但相对于编译型语言,其运行效率可能较低。Python3.x与Python2...
- **注释**:注释用于解释代码,提高代码的可读性,ST语言支持单行和多行注释。 通过本手册,读者将全面了解ST语言的基础知识,从字符集和标识符规则到数据类型和控制结构,为编写高效、清晰的ST程序打下坚实基础...
7. 编译型与解释型语言:Java既不是纯粹的编译型语言,也不是解释型语言。Java源代码首先被编译成字节码(.class文件),然后在运行时由Java虚拟机(JVM)解释执行。 8. `void`与`null`的区别:`void`是Java中的一...
1. **解释型语言**:Python不是编译型语言,而是解释型语言。这意味着你写的代码不需要预先编译成机器语言,而是由Python解释器逐行执行。这简化了开发流程,使得调试和测试更为便捷。 2. **面向对象**:Python支持...
在编程领域,尤其是在数值计算...总的来说,牛顿迭代法是一种强大的数值方法,适用于多种问题,包括求浮点数的平方根。通过JavaScript实现,我们可以创建一个高效且自适应的算法,能够以任意精度计算出一个数的平方根。
Go语言的编译器直接生成高效的本地代码,而不需要中间虚拟机运行时,这使得Go程序通常比解释型语言运行得更快。 Go语言在语法上受到了C语言的强烈影响,但它添加了一些新的特性和简化。例如,Go语言中的指针存在但...
在选择题2中,B选项指出Python运行效率高是不准确的,因为Python是解释型语言,相对于编译型语言,其运行速度通常较慢。 3. Python程序文件的扩展名通常是.py,这在选择题3中得到了验证。 4. Python是解释型语言,...