我正在编写一个代码,我无法理解我得到的奇怪结果。
<?php
$a = 0.01;
$p = pow(0.1, 2); // result: 0.01
if( $a < $p ){
echo "true";
}
?>
此条件的结果总是&#34; true&#34;虽然两个变量都具有相同的值,但来自pow
的结果正在内部改变。好像我不能依赖这个功能。请有人帮我解决这个问题吗?
答案 0 :(得分:2)
因为浮动不准确, 看看b0s3评论中提到的回答问题
首先阅读红色警告 http://www.php.net/manual/en/language.types.float.php。你绝不能 比较浮点数是否相等。你应该使用epsilon技术。
例如:
if (abs($a-$b) < EPSILON) { … }
EPSILON代表的常量 一个非常小的数字(你必须定义它)
https://stackoverflow.com/a/3149007/4998045
所以你可以信任pow
函数,但你不能信任float comparsion
答案 1 :(得分:1)
PHP Docs说:
基地提升到exp的力量。如果两个参数都是非负整数且结果可以表示为整数,则结果将以整数类型返回,否则将以float形式返回。
也许您需要将all转换为int或all转换为浮动。
if( (float)$a < (float)$p ){
echo "true";
}
看到它运行: