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?
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;
}
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.
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
}
(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
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
eine andere Möglichkeit, dies zu lösen: preg_match('/^\d+\.\d+$/',$number);
:)
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+$
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.
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;
}
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+)?$/
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
}
$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
Die einfachste Lösung ist
if(is_float(2.3)){
echo 'true';
}
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.
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;
}