webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob die Zahl dezimal ist

Ich muss in PHP prüfen, ob der Benutzer eine Dezimalzahl eingegeben hat (US-Weg, mit Dezimalpunkt: X.XXX)

Jeder zuverlässige Weg, dies zu tun?

32
CodeVirtuoso

Das meiste, was Sie wollen, können Sie von is_float erhalten, aber wenn Sie wirklich wissen müssen, ob es eine Dezimalzahl enthält, ist Ihre Funktion nicht furchtbar weit (wenn auch die falsche Sprache). :

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

Wenn Sie nur wissen müssen, ob in einer Variablen ein Dezimalzeichen vorhanden ist, wird dies erledigt ...

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

Dies ist keine sehr elegante Lösung, aber es funktioniert mit Saiten und Schwimmern.

Stellen Sie sicher, dass Sie im Strpos-Test! == und nicht! = Verwenden. Andernfalls erhalten Sie falsche Ergebnisse. 

20
Night Owl

wenn "10.00" angezeigt werden soll, überprüfen Sie die Antwort der Nachteule}

Wenn Sie wissen möchten, ob die Dezimalzahlen einen Wert haben, können Sie diese Antwort verwenden.

Funktioniert mit allen Arten von Typen (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
}

Beispiele:

(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

Erläuterung:

fmod gibt den Gleitkomma-Rest (modulo) der Division der Argumente zurück (daher der (! == 0.00))

Modul-Operator - Warum nicht den Modulus-Operator verwenden? Z.B. ($val % 1 != 0) 

Aus den PHP Dokumenten

Modulus-Operanden werden vor der Verarbeitung in ganze Zahlen konvertiert (durch Entfernen des Dezimalteils).

Was den Operationszweck effektiv zerstört, können Sie in anderen Sprachen wie Javascript den Modulus-Operator verwenden

11
77120

eine andere Möglichkeit, dies zu lösen: preg_match('/^\d+\.\d+$/',$number); :)

10
k102

Die von Ihnen gepostete Funktion ist einfach nicht PHP.

Schauen Sie sich an is_float[docs] .

Edit: Ich habe den Teil "Vom Benutzer eingegebener Wert" verfehlt. In diesem Fall können Sie tatsächlich einen regulären Ausdruck verwenden:

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

Mir wurde eine Zeichenfolge übergeben und wollte wissen, ob es eine Dezimalzahl war oder nicht. Ich endete damit:

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

Ich habe eine Reihe von Tests mit Dezimalzahlen und Nicht-Dezimalzahlen auf beiden Seiten von Null durchgeführt, und es schien zu funktionieren.

4
Jeff V

ich benutze das:

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

Dies ist eine tolerantere Art, dies mit Benutzereingaben zu behandeln. Dieser reguläre Ausdruck entspricht "100" oder "100.1", lässt jedoch keine negativen Zahlen zu.

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

Ein totaler Cludge .. aber es funktioniert!

$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

Die einfachste Lösung ist 

if(is_float(2.3)){

 echo 'true';

}
0
Ayyaz Zafar

is_numeric gibt true für Dezimalzahlen und Ganzzahlen zurück. Wenn Ihr Benutzer also 1 anstatt 1.00 faul eingibt, wird true zurückgegeben:

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

Sie können die Ganzzahl mit PHP in eine Dezimalzahl konvertieren oder Ihre Datenbank für Sie erledigen lassen.

0
rybo111

Wenn Sie mit der Formularprüfung arbeiten. Dann in diesem Fall Form send string . Ich habe folgenden Code verwendet, um zu überprüfen, ob Formulareingaben eine Dezimalzahl sind oder nicht . Ich hoffe, dass dies auch für Sie funktioniert.

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