如果您执行var_dump((799-639.20)* 100/799);它将给出float(20)作为结果。如果我进行转换,我得到19。有人可以解释一下这里可能会发生什么吗?
答案 0 :(得分:4)
我无法说出PHP的官方语义,但是很有可能:
(799-639.20)*100/799)
得出19.999999999999996447286321199499070644378662109375。var_dump
显示的输出未显示完整值;它四舍五入到有限的数字并显示“ 20”。例如,它实际上可以使用16个有效数字在内部对数字进行格式化,从而产生“ 20.00000000000000”,然后删除尾随的零和尾随的“。”,从而产生“ 20”。(int)(799-639.20)*100/799)
首先产生如上所述的19.999999999999996447286321199499070644378662109375,然后将其转换为int
,该数字被截断,产生19。