1
carity Feb 19, 2021
浮点精度问题
|
2
fengpan567 Feb 19, 2021
转成整数进行计算
|
3
joesonw Feb 19, 2021
|
4
eastphoton Feb 19, 2021
日经了。十进制下的有限小数可能是二进制下的无限循环小数,存不了。
0.2D=0.00110011B 无限循环,从浮点可存储位数截断后变成 0.19xxx 不允许误差不要用浮点。 |
5
mrgeneral Feb 19, 2021
> 以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
如果确实需要更高的精度,应该使用 BC 或者 GMP 。 |
6
debuggerx Feb 19, 2021
round()
|
7
zhengwenk Feb 19, 2021
var_dump(157.2 * 100)
float(15720) 157.2*100 === 15720 false |
8
Jooooooooo Feb 20, 2021
有些十进制看起来可以表达, 其实二进制表达不了.
|
9
Rache1 Feb 20, 2021
换成 BC Math 方法。
bcmul('157.2',100,0) |