意外行为 PHP float 到 int 的转换
Unexpected behavior PHP float to int conversion
如果你这样做 var_dump((799-639.20)*100/799);它会给出 float(20) 作为结果。如果我进行 int 转换,我得到 19。任何人都可以解释这里可能发生的事情吗?
我无法表达 PHP 的官方语义,但是,很可能:
- 计算
(799-639.20)*100/799)
得到 19.999999999999996447286321199499070644378662109375,因为使用了 IEEE-754 基本 64 位二进制 floating-point.
var_dump
显示的输出未显示完整值;它四舍五入到有限的数字并显示“20”。例如,实际上,它可以使用 16 位有效数字在内部格式化数字,生成“20.00000000000000”,然后删除尾随的无关紧要的零和尾随的“.”,生成“20”。
- 计算
(int)(799-639.20)*100/799)
首先产生19.999999999999996447286321199499070644378662109375,然后将其转换为int
,截断,产生19.
如果你这样做 var_dump((799-639.20)*100/799);它会给出 float(20) 作为结果。如果我进行 int 转换,我得到 19。任何人都可以解释这里可能发生的事情吗?
我无法表达 PHP 的官方语义,但是,很可能:
- 计算
(799-639.20)*100/799)
得到 19.999999999999996447286321199499070644378662109375,因为使用了 IEEE-754 基本 64 位二进制 floating-point. var_dump
显示的输出未显示完整值;它四舍五入到有限的数字并显示“20”。例如,实际上,它可以使用 16 位有效数字在内部格式化数字,生成“20.00000000000000”,然后删除尾随的无关紧要的零和尾随的“.”,生成“20”。- 计算
(int)(799-639.20)*100/799)
首先产生19.999999999999996447286321199499070644378662109375,然后将其转换为int
,截断,产生19.