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