首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP 7.3浮点数计算后的错误行为

是指在某些情况下,PHP 7.3版本中的浮点数计算可能会产生不准确的结果或错误的行为。这种错误行为主要是由于浮点数的精度问题引起的。

浮点数是一种用于表示带有小数部分的数值的数据类型。然而,由于计算机内部使用二进制来表示数字,而不是十进制,所以在进行浮点数计算时可能会出现精度损失。这种精度损失可能导致计算结果与预期不符。

为了解决这个问题,PHP 7.3引入了一种新的浮点数计算模式,称为"flexible"模式。在这种模式下,PHP会根据需要自动调整浮点数的精度,以尽可能减少精度损失。然而,这种自动调整可能会导致一些意外的结果。

为了避免这种错误行为,开发人员可以采取以下几种措施:

  1. 使用整数进行计算:如果可能的话,尽量将浮点数转换为整数进行计算,然后再将结果转换回浮点数。这样可以避免浮点数计算中的精度问题。
  2. 使用专门的数学库:PHP提供了一些专门用于处理高精度计算的数学库,如BCMath和GMP。这些库可以提供更精确的计算结果。
  3. 设置合适的浮点数精度:PHP允许开发人员通过ini_set函数来设置浮点数的精度。可以根据具体需求调整精度,以平衡计算精度和性能。

总结起来,PHP 7.3浮点数计算后的错误行为主要是由于浮点数精度问题引起的。为了避免这种问题,开发人员可以使用整数进行计算,使用专门的数学库,或者调整浮点数精度。腾讯云提供了多种云计算产品和服务,如云服务器、云数据库、云存储等,可以满足各种应用场景的需求。具体产品和服务介绍,请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

php中浮点数计算问题

如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug...所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用。   例子 的同学有过这样的疑问, 因为光问我类似问题的人就很多, 更不用说bugs.php.net上经常有人问…   要搞明白这个原因, 首先我们要知道浮点数的表示(IEEE 754):   浮点数,...符号位:最高位表示数据的正负,0表示正数,1表示负数。   指数位:表示数据以2为底的幂,指数采用偏移码表示   尾数:表示数据小数点后的有效数字.   ...PHP手册对于浮点数有以下警告信息:   Warning   浮点数精度   显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。

1.2K10
  • 框架外的PHP读取.env文件(php5.6、7.3可用版)

    背景:由于项目需要,在框架外(public文件夹下)新建了一个原生的php文件,由于不知道怎么解决 “框架外的php文件,怎么使用DB操作” 于是上网搜索了一早上也没能又方法 于是我使用了,原生连接方法...,我上网找了很多,最终解决办法如下: (我的环境 nginx php7,3) ---- .env文件 APP_DEBUG = true [APP] DEFAULT_TIMEZONE = Asia/Taipei...php class Env { const ENV_PREFIX = 'PHP_'; /** * 加载配置文件 * @access public...* @param string $filePath 配置文件路径 - php7+以上加string * @return void - php7+才支持 */ public...只需要在宝塔上的php相应的版本上把禁用函数去除即可 在访问即可 其他的参数自己根据代码获取,代码简单,自己读吧

    29910

    PHP的microtime()函数 & 浮点数显示精度

    其实这个函数的功能是返回带微秒的时间,PHP中声明如下: mixed microtime ([ bool $get_as_float = FALSE ] ) 关于返回值,文档中是这样描述的 By default...C3TZR1g81UNaPs7vzNXHueW5ZM76DSHWEY7onmfLxcK2iNqEzdqWuQmnpCyJU6THRZpQKPxkyrcBfQHaQwZHVUfHokgVkSZRcBPuPjhKjTJ6hAZgVx6Ypfg.png 可是为何浮点数形式表示的秒...其实这只是由于浮点数显示精度设定导致的,并不影响运算(比如求时间差值)精度。 如果想让其更高精度的显示,可以试试如下代码: <?...C3TZR1g81UNaPs7vzNXHueW5ZM76DSHWEY7onmfLxcK2iPJtsRXm4j3pugmKFsaTvJTiaXsgUnfCcHyA4DwDmQYgZ3djgQFNHe14g5iQeociD2HpwE4Mpdt.png 可见之前默认的浮点数显示精度为...12位,我们设置为16位后,就显示到小数点后6位啦。

    1.4K00

    系统的讲解 - PHP 浮点数高精度运算

    关于 PHP 浮点数运算,特别是金融行业、电子商务订单管理、数据报表等相关业务,利用浮点数进行加减乘除时,稍不留神运算结果就会出现偏差,轻则损失几十万,重则会有信誉损失,甚至吃上官司,我们一定要引起高度重视..."; //输出:6 上面的结果,显然不是我们想要的! PHP 官方手册解释如下: 浮点数的精度有限。...任意精度数学函数 对于任意精度的数学,PHP 提供了支持用字符串表示的任意大小和精度的数字的二进制计算。 BCMath:BC 是 Binary Calculator 的缩写。...小结 通过浮点数精度的问题,了解到浮点数的小数用二进制的表示。 分享了用 PHP 任意精度数学函数,来进行高精度运算。...最后,通过 PHP 的 float 联想到 MySQL 的 float。 以后,在使用浮点数运算的时候,一定要慎之又慎,细节决定成败。

    2K40

    计算机中浮点数的表示

    ,完全是纸面上的二进制数表现形式,在计算机内部是无法使用的。...那么,实际上计算机是以什么样的表现形式来处理小数的呢?我们一起来看一下。 很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数。...浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数,所以基数自然就是 2。因此,实际的数据中往往不考虑基数,只用符号、尾数、指数这三部分即可表示浮点数。...双精度浮点数和单精度浮点数在表示同一个数值时使用的位数不同。此外,双精度浮点数能够表示的数值范围要大于单精度浮点数。...该协会制定了计算机领域的各种规定。读作“eye-triple-e,I-3E”。 符号部分是指使用一个数据位来表示数值的符号。该数据位是 1 时表示负,为 0 时则表示“正或者 0”。

    1.8K10

    js或者php浮点数运算产生多位小数的理解

    php $f = 0.58; var_dump(intval($f * 100)); //为啥输出57 ?...符号位:最高位表示数据的正负,0表示正数,1表示负数。 指数位:表示数据以2为底的幂,指数采用偏移码表示 尾数:表示数据小数点后的有效数字....而两者的二进制, 如果只是通过这52位计算的话,分别是: 0.58 -> 0.57999999999999996 0.57 -> 0.56999999999999995 至于0.58 * 100的具体浮点数乘法...可见, 这个问题的关键点就是: “你看似有穷的小数, 在计算机的二进制表示里却是无穷的” 另外举例辅助理解: 十进制数字 8,用二进制表示为 1000 可以理解为 1*2^3+0*2^2+0*2^1+0...对了,这就是浮点数不是刚刚好等于一个十进制浮点数的原因

    2.5K90

    浮点数在计算机中的表示

    ); printf("*pFloat 的值为:%f\n",*pFloat); return 0; } 运行结果: 产生上述结果的原因:浮点数在计算机中的表示与整数在计算机中的表示存在差异...: 00000000 00000000 00000000 00001001 浮点数在计算机中的表示: 根据国际标准 IEEE 754,任意一个二进制浮点数 V 可以表示为下面这种形式:...IEEE 754 规定,在计算机内包存 M 时,默认这个数的第一位为 1,因此可以被舍去,这样子就可以节省一位有效数字位,使得 32(64)位浮点数可以保存 24(53)位的有效数字。...后加上 20 个 0)其中最高位 1 默认被省略)。...综上:浮点数 9.0 在计算机内的表示为:0 10000010 00100000000000000000000,将其转化为十进制就是:1091567616

    2.1K20

    计算机基础知识之浮点数的表示

    计算机基础知识之原码、补码、反码和移码:https://www.cnblogs.com/kohler21/p/18233912 定点数表示 定点小数(纯小数)在计算机中的表示形式: 注:在计算机中,定点小数主要用于表示浮点数的尾数...定点整数在计算机中的表示形式: 注:在C语言中,char、short、int、long型都属于定点整数。 定点数所能表示的数据范围与下列因素有关。 机器字长:字长越长,其表示的数据范围就越大。...所采用的机器码:补码和移码所能表示的数据范围,比原码和反码所能表示的数据范围要多一个最小负数。 实际上,计算机中处理的数不一定都是纯小数或纯整数(例如圆周率3.1415926)。...浮点数的规格化 根据浮点数的表示这一小节会发现存在一个问题:同一浮点数可能存在多种表示形式,也就是会有不同的阶码和尾数的组合。...浮点数规格化后的表示范围: 例题 【例题1】设浮点数字长为16位,其中阶码5位(含1位阶符),尾数11位(含1位数符),将十进制数-56写成二进制定点数和浮点数(要求规格化表示),并分别写出它们各自的机器数

    44510

    整数、浮点数在计算机中的存储

    一、简述 1.1 计算机底层存储数据的基本原理   计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。...阶码(exponent) :E的作用是对浮点数加权,用于存储科学计数法中的指数数据,并且采用移位存储。float类型的阶码是 8 bits,double类型的阶码是 11 bits。...这样做的目的,是节省1位有效数字。以32位float浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。...道理就是在这里,那 24bit 能精确到小数点后几位呢,我们知道 9 的二进制表示为 1001,所以 4bit 能精确十进制中的 1 位小数点, 24bit 就能使 float 能精确到小数点后 6 位...比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。   接下来我们看下 8.25用float类型存储的数据到底是什么样的?

    1.8K20

    浮点数在计算机中的精度问题

    问题不论大家使用的是什么编程语言想必都知道浮点数在计算机中存在一定的精度问题,特别是有float类型的编程语言中,大部分编程都是建议直接使用更高精度的double类型。...我的天,这简直有违天道的事情,但其实这在计算机中是正常的,要理解这个问题,我们就要先从浮点数是怎样用二进制表示的,然后它是怎么被存储在计算机内的,然后我们再来讨论如何尽可能的去规避这种精度问题的出现。...然后,指数E从内存中取出还可以再分成三种情况:E不全为0或不全为1这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。...这样做是为了表示±0,以及接近于0的很小的数字E全为1这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s)精度问题产生的原因通过上面的内容我们其实已经了解了关于浮点数的内容,总结一下就是:在计算机中...由于计算机的存储是有限的,浮点数只能存储有限的位数。因此,当我们尝试将 0.1 和 0.2 存储为二进制浮点数时,计算机只能存储它们的近似值,而不是它们的精确值。

    8710

    BC数学函数:PHP处理有关钱数等浮点数计算时高精确度函数库

    在商城类的项目当中,避免不了钱数的计算,也就会出现所谓的浮点数精度问题,前两天阅文的小哥哥面试我的时候就问到了这个,Mysql怎么去存钱数?PHP又该怎么处理浮点数?...在数据库去存这些精确的数值的时候,我们会使用decimal去存储 我们使用PHP对浮点数进行加减乘除计算的时候,有时会遇到一些计算结果错误的问题,比如这样: php $num = 0.58; var_dump(intval($num * 100)); 会输出int(57),为什么输出57,PHP鸟哥对这个问题做了解释,感兴趣的可以看一下,地址:PHP浮点数的一个常见问题的解答...对于第三个参数:scale,用于设置结果中的小数点后的小数位数 var_dump(bcmul('1.34747474747', '35', 3)); 输出string(6) "47.161",保留3位小数...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:BC数学函数:PHP处理有关钱数等浮点数计算时高精确度函数库

    1.3K21

    后疫情时代边缘计算的未来

    物联网、5G以及AR / VR的兴起一直在推动将计算带入网络边缘的需求。但是现在,在新冠病毒COVID-19大流行中,对高速网络的日益增长的需求正以前所未有的速度加速发展。...面对挑战 尤其对于服务提供商而言,边缘计算面临着独特的挑战。边缘解决方案的激增意味着设备的部署速度一直比人类管理它们的速度快。...边缘消费的未来 随着优势的腾飞,它从根本上改变了服务提供商考虑其基础架构的方式。边缘越来越多地被视为通常由服务提供商提供和管理的优质资产,将通过AI和机器学习进行优化,以实现几乎无限的业务目的。...一旦释放了这种高度身临其境的边缘计算能力,我们就会看到应用和新的工作负载出现在边缘,这是五年前简直无法想象的。 展望未来,不仅仅是服务提供商能从中获利。...很快,边缘云环境将是开放、安全且云原生的,具有可预测和可扩展的操作,可满足广泛的企业,消费者和电信工作负载。边缘云将具有集成的安全性,以减小任何安全漏洞的爆炸半径。

    23620

    PHP 7.3 新增的三个常用函数,在 WordPress 中可以立即使用

    PHP 7.3 除了功能特性改进之后,还增加了三个常用的函数:is_countable, array_key_first 和 array_key_last,今天我们就讲一下这三个函数和在低版本 PHP...is_countable 函数 在 PHP 7.2 中,用 count() 获取对象和数组的数量。...是可数的 } PHP 7.3 提供新的函数 is_countable() 来解决这个问题,该函数对数组类型或者实现了 Countable 接口的实例的变量返回 true : if(is_countable...WordPress 在任何版本的 PHP 都能使用该函数,不过还是建议使用 7.2 版本的 PHP,因为 WPJAM Basic 要求最低版本的 PHP 是 7.2。...现在,为了避免这种内部干扰,PHP 7.3 推出了新的函数来解决这个问题: key = array_key_first(array); 获取数组第一个元素的键名key = array_key_last(

    3.5K40
    领券