【问题标题】:checking if a number is float in PHP检查数字是否在 PHP 中浮动
【发布时间】:2013-02-14 02:08:53
【问题描述】:

这真的很奇怪。我有这段代码。

$rewardAmt = $amt;
if(is_float($rewardAmt)){
      print_r("is float");die;
} else {
      print_r("is not float"); die;
}

$amt 的值为 0.01。但它正在进入其他条件。所以我做了一个 $amt 的 var_dump。它说字符串(4) 所以我决定对 $amt 进行类型转换

   $rewardAmt = (float)$amt;

但是这样做的问题是即使 $amt 的值为 1,它仍然会被类型转换为浮动并进入 if 条件,这是不应该发生的。有没有其他方法可以做到这一点?谢谢

【问题讨论】:

  • 奇怪的是你使用print_r

标签: php validation floating-point


【解决方案1】:

filter_var()FILTER_VALIDATE_FLOAT 一起使用

if (filter_var($amount, FILTER_VALIDATE_FLOAT))
{
     // good
}

【讨论】:

  • 我试过这个,但这会导致与类型转换相同的问题。如果 $amount = "0.12" 则变为 float(0.12) ,如果为 "1" 则变为 float(1)
  • 非常适合验证浮点数或整数
  • 值得注意的是:string '0' -> 0 is NOT floatint 0 -> 0 is NOT float
【解决方案2】:

如果你把第一行改成

$rewardAmt = $amt+0;

$rewardAmt 应该转换为一个数字。

【讨论】:

    【解决方案3】:

    您可以使用一元+ 运算符,它将字符串转换为适当的类型(intfloat),然后使用is_float 测试生成的数据类型:

    $s = "3.00";
    $n = +$s;
    var_dump( $n ); // float(3)
    var_dump( is_float($n) ); // true
    
    
    $s = "3";
    $n = +$s;
    var_dump( $n ); // int(3)
    var_dump( is_float($n) ); // false
    

    【讨论】:

      【解决方案4】:

      您可以通过以下方式进行检查

      $float = floatval($num); //Convert the string to a float
      if($float && intval($float) != $float) // Check if the converted int is same as the float value...
      {
          // $num is a float
      }else{
          // $num is an integer
      }
      

      【讨论】:

        【解决方案5】:

        正如the documentation of is_float function中所建议的:

        注意:测试变量是数字还是数字字符串(例如 表单输入,总是一个字符串),你必须使用is_numeric()

        答案是使用 is_numeric() 而不是 is_float()。 如果测试的数字是“0”或 0,这也有效。

        【讨论】:

          猜你喜欢
          • 2018-03-04
          • 2021-03-13
          • 2020-07-05
          • 2020-03-15
          • 2013-12-26
          • 1970-01-01
          • 1970-01-01
          • 2011-08-13
          相关资源
          最近更新 更多