Php 浮点到整数错误
昨天我在帮助一个人时,犯了一个奇怪的错误,我无法向他解释它是如何工作的 代码(在3台机器(PHP5.3和PHP5.4)上测试) 怀疑的是int值将是Php 浮点到整数错误,php,casting,int,Php,Casting,Int,昨天我在帮助一个人时,犯了一个奇怪的错误,我无法向他解释它是如何工作的 代码(在3台机器(PHP5.3和PHP5.4)上测试) 怀疑的是int值将是6535,但它最终是6534 有人能解释一下发生了什么吗?用round代替int round($total) 第一次手术后,你实际上没有65.35 >>> '%.20f' % (65.351 - 0.001,) '65.34999999999999431566' 首先从适当缩放的整数值开始,不要尝试将该值转换为整数,或者在获取整
6535
,但它最终是6534
有人能解释一下发生了什么吗?用
round
代替int
round($total)
第一次手术后,你实际上没有65.35
>>> '%.20f' % (65.351 - 0.001,)
'65.34999999999999431566'
首先从适当缩放的整数值开始,不要尝试将该值转换为整数,或者在获取整数值之前添加一个小值。这与如何(阅读此链接中的警告!)将值存储在内存中有关。实际上,在第一次操作之后,您没有精确的十进制值,而是四舍五入的值。大概是65.3499999左右。(该值存储为位列表(0/1))
$r=$explode('.',$total);
debug($r);
这就是为什么在谈到钱时,开发者不存储美元/欧元,而是存储美分的数量。通过这种方式,他们避免使用小数精度较低的浮点数,而是使用精度较高的整数。没错,这是解决方案,但不是我想要的,因为我在寻找原因,而不是如何至少尝试解释一下你的意思
$r=$explode('.',$total);
debug($r);