var_dump((float)'79.10')
返回我79.09999999999999
.我已经尝试了一百万种方法尝试将这个值作为浮点数(number_format
,round
)舍入到原始的79.10 ,我找不到办法来做到这一点.
有什么办法可以float
从原始字符串中获得79.10 的值吗?
不,因为0.1
(并且,通过扩展79.1
)实际上不能表示为float
(假设IEEE-754单精度或双精度编码).0.1
在该编码中有一个无限重复的小数部分:
1001 1001 1001 1001 ...
您要么必须将其保留为字符串,要么接受编码方案没有无限精度并解决它的事实.
后者的一个示例是仅将数字输出到某个精度,例如两个十进制数字,并确保(in-)相等比较使用绝对或相对增量来比较数字.
当你添加数字时,需要相当多的操作才能使不精确效果在百分之一级别变得可见.乘法时速度更快但仍需要一段时间.