php中将浮点数(float)转成字符串,常用的方法隐藏着严重的bug。
因为, php在处理浮点数时有非常不合理的做法, 会有精度丢失。
经研究, 其实是php在显示浮点数时的问题, 也可以说是bug. php内置的echo, var_dump, json_encode, 字符串拼接等函数(指令)在显示浮点数时都有问题, 导致精度丢失.
输出结果:
1315537636.338467
1315537636.3385
1315537636.3385
用php最顺手的方法将浮点数转成字符串或者显示是不行的,(php实例 www.jb200.com)必须使用printf/sprintf将浮点数转成字符串.
第二部分,关于php将浮点数转为整数的问题
答案应该是7。
绝不要将未知的分数强制转换为integer。这样有时会导致不可预料的结果。
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。
这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8 ,因为该结果内部的表示其实是类似 7.9 。
不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3 。
不要相信浮点数结果精确到了最后一位,不要比较两个浮点数是否相等。
如果确实需要更高的精度,应该使用任意精度数学函数或gmp函数。