您的当前位置:首页>全部文章>文章详情

php数值运算之后比较结果不正确

发表于:2024-07-10 13:53:16浏览:144次TAG: #PHP #ThinkPHP

引言

php中运算后的数值,若是浮点型float,拿来直接比较,结果可能会不正确。

结论

要进行的数值若是通过计算得出,则必须转成字符串型才可以比较

示例

  • sprintf("%.3f",0.14764)返回的是一个字符串,再运算,后的值直接比较是错误的。要想得到正确的值,需要转成字符串型才是正确
$a = sprintf("%.3f",0.14764)*100;
// 或是 $a = 0.148*100;
$b = 14.8;
$is = $a < $b;
var_dump($a); // 输出:float(14.8)
var_dump($b); // 输出:float(14.8)
var_dump($is); // 输出:bool(true)    // 这是错误的

$a = (string)$a;
$b = (string)$b;
$is = $a < $b;
var_dump($a); // 输出:string(4) "14.8"
var_dump($b); // 输出:string(4) "14.8"
var_dump($is); // 输出:bool(false)    // 这是正确的
  • sprintf("%.3f",0.14764)返回的是一个字符串,直接比较是正确的
$a = sprintf("%.3f",0.14764);
$b = 14.8;
$is = $a < $b;
var_dump($a); // 输出:string(4) "14.8"
var_dump($b); // 输出:float(14.8)
var_dump($is); // 输出:bool(true)    // 这是正确的