Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于PHP浮点数精度损失问题

关于PHP浮点数精度损失问题

作者头像
wangxl
发布于 2018-03-08 07:21:30
发布于 2018-03-08 07:21:30
95100
代码可运行
举报
文章被收录于专栏:PHP在线PHP在线
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$f = 0.57;
echo intval($f * 100);  //56

结果可能有点出乎你的意外,PHP遵循IEEE 754双精度: 浮点数, 以64位的双精度, 采用1位符号位(E), 11指数位(Q), 52位尾数(M)表示(一共64位). 符号位:最高位表示数据的正负,0表示正数,1表示负数。 指数位:表示数据以2为底的幂,指数采用偏移码表示 尾数:表示数据小数点后的有效数字. 再来看看小数用二进制怎么表示: 乘2取整,顺序排列,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分,但是像0.57这样的小数像这样一直乘下去,小数部分不可能为0.有效位的小数用二进制表示却是无穷的。 0.57的二进制表示基本上(52位)是: 0010001111010111000010100011110101110000101000111101 如果只有52位的话,0.57 =》 0.56999999999999995 不难看出上面意外的结果了吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
不可忽视的PHP数据精度损失问题
我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。
架构精进之路
2021/02/05
9870
不可忽视的PHP数据精度损失问题
PHP和Python浮点数精度问题
what? 为啥输出了57 针对这个问题,逛了鸟哥的博客。(PHP浮点数的一个常见问题的解答) 主要需要理解的就是在计算机中浮点数转成二进制时是无限长的值。
用户2475223
2019/12/17
1K0
PHP和Python浮点数精度问题
PHP浮点数
上面输出的结果是57, 而不是58, 为什么呢, 因为 你看似有穷的小数, 在计算机的二进制表示里却是无穷的(鸟哥的原话),0.58用二进制后, 重新计算出来的值是:0.57999999999999996, 所以乘以100之后,去整数部分,就是57了。
codecc
2018/07/19
1.4K0
js或者php浮点数运算产生多位小数的理解
<?php $f = 0.58; var_dump(intval($f * 100)); //为啥输出57 ?>  首先我们要知道浮点数的表示(IEEE 754): 浮点数, 以64位
smy
2018/04/03
2.5K0
js或者php浮点数运算产生多位小数的理解
JavaScript 浮点数之迷:0.1 + 0.2 为什么不等于 0.3?
“0.1 + 0.2 = ?” 这个问题,你要是问小学生,他也许会立马告诉你 0.3。但是在计算机的世界里就没有这么简单了,做为一名程序开发者在你面试时如果有人这样问你,小心陷阱喽! 你可能在哪里见过
五月君
2020/02/19
4.2K0
IEEE 754二进制浮点数算术标准
纳尼,不应该是0.1么,怎么变成0.09999999999999998呢?这就要从ECMAScript标准讲起了。
meteoric
2018/11/19
1.8K0
double浮点数运算为啥会丢失精度?
前言:在工作中,谈到有小数点的加减乘除都会想到用BigDecimal来解决,但是有很多人对于double或者float为啥会丢失精度一脸茫然。还有BigDecimal是怎么解决的?话不多说,我们开始。
王念博客
2019/07/24
4.6K0
ieee754标准一个浮点数由什么组成_某数采用ieee754单精度浮点数格式
FBI WARNING:鄙人首个开源电子书 《Go 编码建议》已经上线啦,欢迎各位大佬斧正指导,协同共建。
全栈程序员站长
2022/11/03
1K1
小朋友学C语言(43):浮点数的深入分析
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷∞与非数值NaN),以及这些数值的“浮点数运算符”。 IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE浮点数格式与算术,但有些将其列为非必需的。例如,IEEE 754问世之前就有的C语言,现在有包括IEEE算术,但不算作强制要求 C语言的float通常是指IEEE单精确度,而double是指双精确度。
海天一树
2019/03/06
2K0
小朋友学C语言(43):浮点数的深入分析
php中浮点数计算问题
如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的,我用python也遇到这个问题。所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用。
全栈程序员站长
2021/12/23
1.2K0
浮点数与IEEE 754标准浅谈
浮点数是一种用于表示实数的数值表示形式,它使计算机能够处理非常大的或非常小的数值。例如,在科学计算中,我们经常需要处理像 6.022 × 10^23 这样的数字,使用浮点数表示可以极大地提高计算的灵活性和效率。
一条晒干的咸鱼
2024/11/19
4640
浮点数与IEEE 754标准浅谈
IEEE754浮点数的表示方法
浮点数(Floating-point Number)是一种对于实数的近似值数值表现法,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次幂得到。以这种表示法表示的数值,称为浮点数。表示方法类似于基数为10的科学计数法。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
恋喵大鲤鱼
2018/08/03
3.2K0
IEEE754浮点数的表示方法
js浮点数精度问题详解
浮点数精度问题是指在计算机中使用二进制表示浮点数时,由于二进制无法精确表示某些十进制小数,导致计算结果可能存在舍入误差或不精确的情况。
can4hou6joeng4
2023/11/17
7530
C语言中的浮点数存储:深入探讨
由此可知,C语言中浮点数的存储方式和整数的存储方式是不同的,下面就让我们详细了解一下。
平凡之路.
2024/10/09
2380
C语言中的浮点数存储:深入探讨
小朋友学C语言(4):单精度浮点数与双精度浮点数
上节课 简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。 单精度和双精度精确的范围不一样。 计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。 稍大一点的单位是字节(Byte,简写为B)。 再大一级的是千字节(kilo Bytes),用k来表示。 再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。 再大一级的单位为G。一部高清电影的大小通常为1~2G。 再大一级的单位为T。 换算关系为: 1B = 8bit 1k =
海天一树
2018/04/17
3K0
小朋友学C语言(4):单精度浮点数与双精度浮点数
浮点数原理与精度损失问题
计算机中小数的表示按照小数点的位置是否固定可以分为浮点数和定点数。为了方便和float32浮点数做对比,我们构造一个32位精度的定点数,其中小数点固定在23bit处:
TOMOCAT
2020/10/29
3.3K0
浮点数原理与精度损失问题
浮点数比较的精度问题
如果变量 a , b 换 0.75 , 0.5 可以看出运行出 c == 1.25 ,说明浮点数运算是不稳定的。
C语言与CPP编程
2020/12/02
1.7K0
浮点数比较的精度问题
浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
之前自己答的不是满意(对 陈嘉栋的回答 还是满意的),想对这个问题做个深入浅出的总结
周陆军
2019/05/17
3K0
C语言-整数与浮点数:内存存储的差异
在计算机科学中,整数和浮点数是我们经常处理的两种数据类型。它们在内存中的存储方式决定了它们可以表示的范围、精度以及如何进行数学运算。了解这些基本概念对于理解计算机如何处理这些数据以及优化相关代码至关重要。
小志biubiu
2025/02/27
1450
浮点数在计算机中的精度问题
不论大家使用的是什么编程语言想必都知道浮点数在计算机中存在一定的精度问题,特别是有float类型的编程语言中,大部分编程都是建议直接使用更高精度的double类型。下面我做的示例都以python为主。
不知名小白
2025/01/09
1570
推荐阅读
相关推荐
不可忽视的PHP数据精度损失问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验