【问题标题】:PHP Allow only numbers with 2 decimalsPHP 只允许带 2 位小数的数字
【发布时间】:2015-06-07 16:28:17
【问题描述】:

我需要一个函数来检查数字是否有 2 位小数。

例如:

$number = '1.00'; // Valid
$number2 = '1'; // Not valid
$number3 = '1.000' //Not valid

【问题讨论】:

  • 你试过了吗?
  • 我在考虑使用 preg_math 但我认为有更好的选择,这就是我在这里发布问题的原因,也许有人有更好的想法。
  • 也许可以试试:preg_match()

标签: php numbers decimal


【解决方案1】:

你可以这样检查:

$str = "1.23444";
print strlen(substr(strrchr($str, "."), 1));

您必须将变量转换为字符串,但这不是一个大问题。这样做:

$d = 100.0/81.0;
$s = strval($d);

【讨论】:

    【解决方案2】:

    你可以这样做:

    if(strlen(substr(strrchr($number, "."), 1)) == 2){
        echo "valid";
    }else{
        echo "not valid";
    }
    

    【讨论】:

      【解决方案3】:

      正则表达式可能是一种解决方案,因为您的数字似乎被声明为字符串。

      代码:

      <?php
       $re = "/(\d\.\d{2})(?!\d)/"; 
      $array_input = array('1.00', '1', '1.000');
      
      foreach($array_input as $row)
      {
          if(preg_match($re, $row, $matches) == 0)
              echo $row . " isn't a valid value with 2 decimals only. <br>";
      
          else
              echo $row . " is valid. <br>";
      }
      ?>
      

      输出:

      1.00 is valid.
      1 isn't a valid value with 2 decimals only.
      1.000 isn't a valid value with 2 decimals only. 
      

      【讨论】:

        【解决方案4】:

        你为什么不强迫他们使用这样的东西有 2 位小数

        $original = 2;
        $float = number_format($number, 2);
        // echo $float = 2.00
        

        我想如果您需要强制浮点数只有 2 位小数,您可以执行以下操作。

        $numbers = array(2.453, 3.35, 2.53, 1.636);
        foreach($numbers as $number) {
            if(strpos($number, '.') !== false) {
                if(strlen($parts[1]) == 2) {
                    echo $number .' is valid!';
                } else {
                    echo $number .' is NOT valid!';
                }
             }
          }
        

        以上是实现此目的的一种方法,但还有许多其他方法。您可以使用 array_map 或 array_filter 也可以使用数学,如下所示

        $numbers = array(2.453, 3.35, 2.53, 1.636);
        $valid_numbers = array_filter($numbers, function($number) { return strlen($number) - strpos($number, '.');
        

        【讨论】:

        • 我有一个表单,用户必须提交仅包含 2 位小数的值。例如,如果他提交 10 就可以了,我可以使用 number_format,但如果用户提交 10.001 不是对这个数字进行四舍五入的选项,我需要它只有 2 位小数。
        • 在这种情况下,我建议您添加一些前端逻辑以及后端逻辑:)
        【解决方案5】:
        function check_decimals($input, $number_of_decimals) 
        {
           if(strlen(substr(strrchr((string)$input, "."), 1)) == $number_of_decimals) 
           {
               return TRUE;
           }
           else {
               return FALSE;
           }
        }
        
        check_decimals("1.000", 2);
        

        【讨论】:

          【解决方案6】:

          这可能是使用preg_match_all的解决方案

          $re = "/^\\d+(?:\\.\\d{2})?$/m"; 
          $str = "1.00\n13333.55\n1.000"; 
          
          preg_match_all($re, $str, $matches);
          echo '<pre>';
          print_r($matches);
          echo '</pre>';
          

          正则表达式https://regex101.com/r/nB7eC4/1

          代码http://codepad.viper-7.com/49ZuEa

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-03-02
            • 2021-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-03
            • 1970-01-01
            相关资源
            最近更新 更多