PHP奇怪的浮点不精确
如果我尝试打印PHP奇怪的浮点不精确,php,Php,如果我尝试打印 echo ((0.1 + 0.7) * 10); echo (int)((0.1 + 0.7) * 10); 输出 但如果我试着打印 echo ((0.1 + 0.7) * 10); echo (int)((0.1 + 0.7) * 10); 输出 为什么会有两种不同的结果?如果在没有int cast的情况下执行echo,则会导致: echo ((0.1 + 0.7) * 10); 8 所以发生的是,浮点实际上表示为7.99999 当您执行整型转换时,默认行为是接受整型
echo ((0.1 + 0.7) * 10);
echo (int)((0.1 + 0.7) * 10);
输出
但如果我试着打印
echo ((0.1 + 0.7) * 10);
echo (int)((0.1 + 0.7) * 10);
输出
为什么会有两种不同的结果?如果在没有int cast的情况下执行echo,则会导致:
echo ((0.1 + 0.7) * 10);
8
所以发生的是,浮点实际上表示为7.99999
当您执行整型转换时,默认行为是接受整型部分,即7。虽然它非常接近8,但这并不是一个演员的行为
这些错误是由于浮点数是用二进制基数表示的。因此,正确表示0.8是不可能的。浮点数将答案四舍五入,希望不会太麻烦。如果将浮点表示为0.8,则结果为0.80000
使用PHP交互式shell PHP-a进行概念验证:
如果在不执行int强制转换的情况下执行回显,则会导致:
echo ((0.1 + 0.7) * 10);
8
所以发生的是,浮点实际上表示为7.99999
当您执行整型转换时,默认行为是接受整型部分,即7。虽然它非常接近8,但这并不是一个演员的行为
这些错误是由于浮点数是用二进制基数表示的。因此,正确表示0.8是不可能的。浮点数将答案四舍五入,希望不会太麻烦。如果将浮点表示为0.8,则结果为0.80000
使用PHP交互式shell PHP-a进行概念验证:
正如您可能知道的,浮点数学由于其表示形式的限制而不精确 0.1+0.7*10等于7.999999999 当echo输出时,数字通过舍入转换为字符串,舍入默认使用php.ini精度设置15,我认为这是为了限制十进制数字的数量。碰巧这个四舍五入正好是8
但是,int将浮点转换为整数,这是通过截断完成的。不管你离下一个整数有多近,它总是向下取整。这就是为什么在这里得到7。正如您可能知道的,浮点数学由于其表示形式的限制而不精确 0.1+0.7*10等于7.999999999 当echo输出时,数字通过舍入转换为字符串,舍入默认使用php.ini精度设置15,我认为这是为了限制十进制数字的数量。碰巧这个四舍五入正好是8
但是,int将浮点转换为整数,这是通过截断完成的。不管你离下一个整数有多近,它总是向下取整。这就是为什么在这里得到7。重新打开这个问题是因为,虽然我们已经无数次地看到浮点错误,但这是一个特别有趣的边缘情况,与副本完全无关。重新打开这个问题是因为,虽然我们无数次地看到浮点错误,这是一个特别有趣的边缘案例,与副本完全无关。感谢您的回复!现在理解这个奇怪的现象。谢谢你的回复!现在,请理解这个奇怪的现象。