web-dev-qa-db-ja.com

数値が10進数かどうかを確認します

チェックインする必要がありますPHPユーザーが10進数を入力した場合(米国の方法、小数点付き:X.XXX)

これを行うための信頼できる方法はありますか?

36
CodeVirtuoso

必要なもののほとんどは is_float から取得できますが、reallyに小数点があるかどうかを知る必要がある場合、上記の関数はそれほど遠くありません(間違った言語ではありますが):

function is_decimal( $val )
{
    return is_numeric( $val ) && floor( $val ) != $val;
}
87
cwallenpoole

変数に小数点が存在するかどうかだけを知る必要がある場合は、これで仕事が完了します...

function containsDecimal( $value ) {
    if ( strpos( $value, "." ) !== false ) {
        return true;
    }
    return false;
}

これは非常にエレガントなソリューションではありませんが、文字列とフロートで動作します。

Strposテストでは!=ではなく!==を使用してください。間違った結果が得られます。

22
Night Owl

「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演算子を使用できます

18
77120

これを解決する別の方法:preg_match('/^\d+\.\d+$/',$number); :)

11
k102

投稿した関数は、PHPではありません。

見て - is_float[ドキュメント]

編集:「ユーザーが入力した値」の部分を見逃しました。この場合、実際には正規表現を使用できます。

^\d+\.\d+$
7
Felix Kling

文字列が渡され、小数かどうかを知りたいと思いました。私はこれで終わった:

function isDecimal($value) 
{
     return ((float) $value !== floor($value));
}

ゼロの両側で小数と非小数を含む一連のテストを実行しましたが、うまくいくようです。

5
Jeff V

私はこれを使用します:

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;
}
1
Eric_ph

これは、ユーザー入力でこれを処理するためのより寛容な方法です。この正規表現は「100」または「100.1」の両方に一致しますが、負の数は許可されません。

/^(\d+)(\.\d+)?$/
1
Chaoix

完全な手抜き..しかし、ちょっとそれは動作します!

$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
}
0
Duane Lortie
$lat = '-25.3654';

if(preg_match('/./',$lat)) {
    echo "\nYes its a decimal value\n";
}
else{
    echo 'No its not a decimal value';
}
0
Neocortex
   // 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
0
Van Bien

最も簡単なソリューションは

if(is_float(2.3)){

 echo 'true';

}
0
Ayyaz Zafar

is_numericは、小数および整数に対してtrueを返します。したがって、ユーザーが遅延して1 の代わりに 1.00それでもtrueを返します:

echo is_numeric(1); // true
echo is_numeric(1.00); // true

PHPを使用して整数を10進数に変換するか、データベースに任せてください。

0
rybo111

フォーム検証を使用している場合。この場合、フォームは文字列を送信します。次のコードを使用して、フォーム入力が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;
}
0
Adnan Ahmad