チェックインする必要がありますPHPユーザーが10進数を入力した場合(米国の方法、小数点付き:X.XXX)
これを行うための信頼できる方法はありますか?
必要なもののほとんどは is_float から取得できますが、reallyに小数点があるかどうかを知る必要がある場合、上記の関数はそれほど遠くありません(間違った言語ではありますが):
function is_decimal( $val )
{
return is_numeric( $val ) && floor( $val ) != $val;
}
変数に小数点が存在するかどうかだけを知る必要がある場合は、これで仕事が完了します...
function containsDecimal( $value ) {
if ( strpos( $value, "." ) !== false ) {
return true;
}
return false;
}
これは非常にエレガントなソリューションではありませんが、文字列とフロートで動作します。
Strposテストでは!=ではなく!==を使用してください。間違った結果が得られます。
「10.00」が真のチェックを返すようにしたい場合は、夜のフクロウの答えを確認してください
小数に値があるかどうかを知りたい場合は、この回答を使用できます。
すべての種類のタイプ(int、float、string)で動作します
if(fmod($val, 1) !== 0.00){
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
(fmod(1.00, 1) !== 0.00) // returns false
(fmod(2, 1) !== 0.00) // returns false
(fmod(3.01, 1) !== 0.00) // returns true
(fmod(4.33333, 1) !== 0.00) // returns true
(fmod(5.00000, 1) !== 0.00) // returns false
(fmod('6.50', 1) !== 0.00) // returns true
fmod
は、引数の除算の浮動小数点剰余(モジュロ)を返します(したがって(!== 0.00))
モジュラス演算子-モジュラス演算子を使用しないのはなぜですか?例えば。 ($val % 1 != 0)
PHPドキュメント から:
モジュラスのオペランドは、処理の前に(小数部分を除去することにより)整数に変換されます。
これは効果的にopの目的を破壊します。javascriptなどの他の言語では、modulus演算子を使用できます
これを解決する別の方法:preg_match('/^\d+\.\d+$/',$number);
:)
文字列が渡され、小数かどうかを知りたいと思いました。私はこれで終わった:
function isDecimal($value)
{
return ((float) $value !== floor($value));
}
ゼロの両側で小数と非小数を含む一連のテストを実行しましたが、うまくいくようです。
私はこれを使用します:
function is_decimal ($price){
$value= trim($price); // trim space keys
$value= is_numeric($value); // validate numeric and numeric string, e.g., 12.00, 1e00, 123; but not -123
$value= preg_match('/^\d$/', $value); // only allow any digit e.g., 0,1,2,3,4,5,6,7,8,9. This will eliminate the numeric string, e.g., 1e00
$value= round($value, 2); // to a specified number of decimal places.e.g., 1.12345=> 1.12
return $value;
}
これは、ユーザー入力でこれを処理するためのより寛容な方法です。この正規表現は「100」または「100.1」の両方に一致しますが、負の数は許可されません。
/^(\d+)(\.\d+)?$/
完全な手抜き..しかし、ちょっとそれは動作します!
$numpart = explode(".", $sumnum);
if ((exists($numpart[1]) && ($numpart[1] > 0 )){
// it's a decimal that is greater than zero
} else {
// its not a decimal, or the decimal is zero
}
$lat = '-25.3654';
if(preg_match('/./',$lat)) {
echo "\nYes its a decimal value\n";
}
else{
echo 'No its not a decimal value';
}
// if numeric
if (is_numeric($field)) {
$whole = floor($field);
$fraction = $field - $whole;
// if decimal
if ($fraction > 0)
// do sth
else
// if integer
// do sth
}
else
// if non-numeric
// do sth
最も簡単なソリューションは
if(is_float(2.3)){
echo 'true';
}
is_numeric
は、小数および整数に対してtrue
を返します。したがって、ユーザーが遅延して1
の代わりに 1.00
それでもtrue
を返します:
echo is_numeric(1); // true
echo is_numeric(1.00); // true
PHPを使用して整数を10進数に変換するか、データベースに任せてください。
フォーム検証を使用している場合。この場合、フォームは文字列を送信します。次のコードを使用して、フォーム入力が10進数かどうかを確認しました。これがあなたにも役立つことを願っています。
function is_decimal($input = '') {
$alphabets = str_split($input);
$find = array('0','1','2','3','4','5','6','7','8','9','.'); // Please note: All intiger numbers are decimal. If you want to check numbers without point "." then you can remove '.' from array.
foreach ($alphabets as $key => $alphabet) {
if (!in_array($alphabet, $find)) {
return false;
}
}
// Check if user has enter "." point more then once.
if (substr_count($input, ".") > 1) {
return false;
}
return true;
}