我想挑選出兩位以上的小數(小數點後兩位以上的數字)。我cant't弄清楚爲什麼這不起作用:PHP:如何檢查一個數是否有兩位以上的小數
if ($num * 100 != floor($num * 100)) {
echo "The number you entered has more than two decimals";
}
爲什麼數32.45挑選出來,而32.44是不是?
我想挑選出兩位以上的小數(小數點後兩位以上的數字)。我cant't弄清楚爲什麼這不起作用:PHP:如何檢查一個數是否有兩位以上的小數
if ($num * 100 != floor($num * 100)) {
echo "The number you entered has more than two decimals";
}
爲什麼數32.45挑選出來,而32.44是不是?
你可以使用正則表達式之間:
$number = 1.12; //Don't match
$number = 1.123; //Match
$number = 1.1234; //Match
$number = 1.123; //Match
if (preg_match('/\.\d{3,}/', $number)) {
# Successful match
} else {
# Match attempt failed
}
謝謝!它仍然不適用於大量數字。但是表達式'/。\。\ d {3,} /'似乎工作正常。 – user3021737
你的意思是「它仍然不適用於大數目」? – Babblo
@ user3021737請注意,'.'在正則表達式中表示「任何字符」。 '\ .'的意思是「文字」。「字符」。本質上這個答案會匹配'1234',因爲它與'* [digit] [digit] [digit]' – h2ooooooo
您可以使用正則表達式來找出是否有超過2位小數:
<?php
function doesNumberHaveMoreThan2Decimals($number) {
return (preg_match('/\.[0-9]{2,}[1-9][0-9]*$/', (string)$number) > 0);
}
$numbers = array(123.456, 123.450, '123.450', 123.45000001, 123, 123.4);
foreach ($numbers as $number) {
echo $number . ': ' . (doesNumberHaveMoreThan2Decimals($number) ? 'Y' : 'N') . PHP_EOL;
}
?>
輸出:
123.456: Y
123.45: N
123.450: N
123.45000001: Y
123: N
123.4: N
正則表達式屍檢(/\.[0-9]{2,}[1-9][0-9]*$/
):
\.
- 字面.
字符[0-9]{2,}
- 數字從0至9的匹配的2倍以上[1-9]
- 1和9之間的一個數位匹配的一個單一的時間(以確保我們忽略尾隨零)[0-9]*
- 0到9之間的數字匹配0到無窮大時間(以確保我們允許123.4510
即使以0
結尾)。$
- 字符串必須結束在這裏 - 沒有別的可以是我們的最後一場比賽和字符串的結尾至少跟隨零不合格。 –
@AlmaDo你說得對 - 現在已經修復了,儘管拖尾的零不會存在於浮動類型中。 – h2ooooooo
我可能是正確的。 OP沒有提到 - 所以我只是注意到 –
你可以使用下面的函數(負數的作品,太):
function decimalCheck($num) {
$decimals = ((int) $num != $num) ? (strlen($num) - strpos($num, '.')) - 1 : 0;
return $decimals >= 2;
}
測試用例:
$numbers = array(
32.45,
32.44,
123.21,
21.5454,
1.545400,
2.201054,
0.05445,
32,
12.0545400,
12.64564,
-454.44,
-0.5454
);
foreach ($numbers as $number) {
echo $number. "\t : \t";
echo (decimalCheck($number)) ? 'true' : 'false';
echo "<br/>";
}
輸出:
32.45 : true
32.44 : true
123.21 : true
21.5454 : true
1.5454 : true
2.201054 : true
0.05445 : true
32 : false
12.05454 : true
12.64564 : true
-454.44 : true
-0.5454 : true
小數的數字的字符串表示的屬性,而不是數字本身 – Eric
請問你對'32.560000'爲雙位數或不是? –
如果選擇32.560000或者不選,那並不重要。 – user3021737