我知道 php 浮点数有对应的计算函数,但是上面这个例子还是不知道原因
我知道 php 浮点数有对应的计算函数,但是上面这个例子还是不知道原因
|
justseemoreMar 2, 2021
1
bcmath 处理这个问题, 然后这个不是 php 的问题,都有这个问题,Google 一下 浮点数陷阱
|
|
msg7086Mar 2, 2021 via Android
2
因为计算结果是 1889.9999 你 floor 一下当然就把 0.9999 干掉了。
|
|
markgorMar 2, 2021
3
你看似有穷的小数, 在计算机的二进制表示里却是无穷的
var_dump((1890/100*100) == 1890);//<====false var_dump(1890/100*100);//float var_dump(1890);//int 你可以把他们转为 2 进制,再转回 10 进制看过程 |
|
weirdoMar 2, 2021
4
浏览器打开 console
输入 1890/100*100 回车 |
|
zagrebMar 2, 2021
5
是不是要这样取整?
floor(x - 0.5) + 1 |
|
JJstyleMar 2, 2021
7
“为什么 1890 / 100 * 100 结果为正确值 1890” 就不对
> 1890/100 * 100 > 1889.9999999999998 |
|
PharielMar 2, 2021 via iPhone
8
IEEE 754 好好学习一下
|
|
dongiskingMar 2, 2021
9
这个是精度损失的问题,必须用 bcmath 。
https://www.cnblogs.com/datang6777/p/7049159.html |
|
wh1012023498Mar 2, 2021
10
IEEE754 标准, 遵循这个标准的都有这个问题。
|
|
sorshionMar 2, 2021
11
|
|
HardrainMar 6, 2021
12
google
IEEE 754 precision |