PHP 只允许有两位小数的数字
PHP Allow only numbers with 2 decimals
我需要一个函数来检查数字是否有两位小数。
例如:
$number = '1.00'; // Valid
$number2 = '1'; // Not valid
$number3 = '1.000' //Not valid
你为什么不使用类似这样的方法强制他们有两位小数
$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, '.');
你可以这样检查:
$str = "1.23444";
print strlen(substr(strrchr($str, "."), 1));
您必须将变量转换为字符串,但这不是大问题。这样做:
$d = 100.0/81.0;
$s = strval($d);
正则表达式可能是一种解决方案,因为您的数字似乎被声明为字符串。
代码:
<?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.
你可以这样做:
if(strlen(substr(strrchr($number, "."), 1)) == 2){
echo "valid";
}else{
echo "not valid";
}
这可能是使用 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>';
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);
我需要一个函数来检查数字是否有两位小数。
例如:
$number = '1.00'; // Valid
$number2 = '1'; // Not valid
$number3 = '1.000' //Not valid
你为什么不使用类似这样的方法强制他们有两位小数
$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, '.');
你可以这样检查:
$str = "1.23444";
print strlen(substr(strrchr($str, "."), 1));
您必须将变量转换为字符串,但这不是大问题。这样做:
$d = 100.0/81.0;
$s = strval($d);
正则表达式可能是一种解决方案,因为您的数字似乎被声明为字符串。
代码:
<?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.
你可以这样做:
if(strlen(substr(strrchr($number, "."), 1)) == 2){
echo "valid";
}else{
echo "not valid";
}
这可能是使用 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>';
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);