美文网首页
PHP中浮点数计算的注意事项

PHP中浮点数计算的注意事项

作者: 周星星的学习笔记 | 来源:发表于2021-01-19 10:06 被阅读0次

一、问题

1.今天遇到一个问题,看下面的代码

echo intval(19.9 * 100);
//输出:1989

为什么这个地方输出不是1990而是1989呢?后来查了资料,原来啊,这不仅仅是PHP的一个问题,其他的语言也都存在这样的问题,是因为计算机里面表示浮点数的时候,会存在一个精度的问题,看似有穷的小数, 在计算机的二进制表示里却是无穷的,因此PHP浮点型在进行+-*%/会存在不准确的问题,所以如果需要高精度的计算,应该采用精度数学函数进行计算。下面有一些数学计算函数,可以参考一下:

bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减

2.上面的乘法使用bcmul函数试验一下

$b = bcmul(19.9,100,2);
var_dump($b);
echo "\n";
echo intval($b);
echo "\n";
#结果:
zhoujiafei:test zhoujiafei$ php test.php 
string(7) "1990.00"

1990

二、备注

1.参考文章:https://www.cnblogs.com/doseoer/p/10614469.html

相关文章

  • PHP中浮点数计算的注意事项

    一、问题 1.今天遇到一个问题,看下面的代码 为什么这个地方输出不是1990而是1989呢?后来查了资料,原来啊,...

  • php浮点数计算

    bcadd — 2个任意精度数字的加法计算 左操作数和右操作数求和 ,scale 用于设置结果中小数点后的小数位数...

  • 点滴笔记(2018年08月24日更新)

    问:浮点数为什么存在精度问题? 计算机中的浮点数对应于数学当中的小数。简单计算下,32位浮点数最多可以表示2^32...

  • PHP浮点数精度问题

    PHP常见的浮点数“bug” 浮点数的表示形式 浮点数的表示(IEEE 754): 浮点数, 以64位的长度(双精...

  • php公式计算

    1 通过evel计算公式 注意浮点数运算 eval — 把字符串作为PHP代码执行 2 通过bc函数实现 任意精度...

  • Js中做减法时,出现小数位增加Bug

    这个bug是Js固有的,这是因为在javascript中浮点数的计算是以2进制计算的,浮点数精度不准。可以用下面方...

  • 通过FormData实现上传文件

    html代码 index.html 后端代码(以php为例) upload.php 注意事项 在PHP中通过pri...

  • TP框架 发送邮箱实现找回密码

    注意事项 开启socket:在PHP.ini中取消extension=php_sockets.dll前面的分号。 ...

  • 1.2 浮点型运算

    在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示。浮点数在内存的表示...

  • IEEE浮点数表示

    该文主要介绍一个浮点数在计算机中的表示,属于很底层的知识点 介绍计算机如何表示浮点数之前,先了解一下日常生活中,我...

网友评论

      本文标题:PHP中浮点数计算的注意事项

      本文链接:https://www.haomeiwen.com/subject/vqwxzktx.html