PHP仅允许带有2位小数的数字

时间:2015-06-07 16:28:18

标签: php numbers decimal

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

例如:

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

6 个答案:

答案 0 :(得分:2)

您可以这样检查:

Ok(c.toJson.prettyPrint)

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

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

答案 1 :(得分:1)

为什么你不会强迫他们使用类似的

来获得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 :(得分:1)

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

代码:

<?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. 

答案 3 :(得分:1)

您可以这样做:

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

答案 4 :(得分:1)

这可能是使用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>';

REGEX https://regex101.com/r/nB7eC4/1

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

答案 5 :(得分:1)

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);