Wie konvertiere ich eine Zeichenfolge in eine Zahl in PHP?

669

Ich mag diese Art von Werten konvertieren, '3', '2.34', '0.234343'etc. in eine Zahl. In JavaScript können wir verwenden Number(), aber gibt es eine ähnliche Methode in PHP?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545
Sara
quelle
62
Leser aufgepasst: Es gibt keine wirkliche Antwort auf diese Frage :(
Matthieu Napoli
@MatthieuNapoli Die Antwort ist, dass Php es normalerweise für Sie herausfindet - einer der Vorteile eines dynamischen Typsystems.
Kolob Canyon
12
Mit all den Ketten der Unsicherheit und "normalerweise".
Person27
2
@MatthieuNapoli Wie ist Typ Casting keine "echte Antwort"? Sie können sogar den Typ überprüfen, nachdem Sie typisiert haben, wenn Sie ein Baby darüber sein möchten
Kolob Canyon
3
@MatthieuNapoli Ich bin froh, dass Sie Ihren Standpunkt klargestellt haben, dass es mehr als einen Weg gibt, eine Katze zu häuten, anstatt dass es keinen Weg gibt, dies zu tun. Casting ist zum Beispiel bei Datenbankoperationen sehr wichtig. Beispielsweise kann es bei einer parametrisierten PDO-Abfrage manchmal schwierig sein, dass der Parser erkennt, dass es sich um eine Zahl und nicht um eine Zeichenfolge handelt, und dann erhalten Sie eine 0 in einem Ganzzahlfeld, weil Sie die Zeichenfolge nicht in ein int umgewandelt haben im Parameterschritt.
Stubsthewizard

Antworten:

1029

Normalerweise müssen Sie dies nicht tun, da PHP den Typ in den meisten Fällen für Sie erzwingt. Für Situationen , in denen Sie nicht möchten , explizit den Typ umwandeln, werfen sie:

$num = "3.14";
$int = (int)$num;
$float = (float)$num;
täuschen
quelle
4
Hier ist die Situation etwas anders. Ich möchte eine beliebige Zeichenfolge (die nur Zahlen enthält) in eine allgemeine Zahl konvertieren. Wie Sie vielleicht in JavaScript wissen, können wir parseInt () verwenden , um string => int zu konvertieren, oder parseFloat (), um string => float zu konvertieren. Im Allgemeinen verwendet JavaScript jedoch Number (), um string => number zu konvertieren. Ich möchte eine ähnliche Methode in PHP?
Sara
4
Es war nützlich für mich, wenn ich eine Monatszahl aus einer vollständigen Datumszeichenfolge erhalten hatte, mit der ich einen Wert aus einem Mottennamen-Array gezogen habe. Auto Casting findet hier nicht statt, da Zeichenfolgenindizes gültig, aber nicht gleichwertig sind.
Cazuma Nii Cavalcanti
19
Je nach Kontext ist es möglicherweise nicht sicher anzunehmen, dass dies .das Dezimaltrennzeichen ist. en.wikipedia.org/wiki/…
Dave Jarvis
3
@Sara: Sie können auch eine Funktion zum Konvertieren der Zeichenfolge in eine Zahl erstellen, indem Sie sie zuerst in eine Ganzzahl umwandeln , dann in float umwandeln und dann vergleichen, ob beide Werte (integer und float) gleich sind. Wenn dies der Fall ist, sollten Sie den Wert als Ganzzahl zurückgeben, wenn nicht, als Float. Hoffe du kommst auf die Idee.
Youstay Igo
2
Es gibt Zeiten, in denen Sie die Ganzzahl an das Dateisystem übergeben müssen. Es ist keine gute Idee, darauf zu warten, dass PHP die Konvertierung für Sie durchführt.
AaA
173

Es gibt einige Möglichkeiten, dies zu tun:

  1. Wandeln Sie die Zeichenfolgen in numerische primitive Datentypen um:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. Führen Sie mathematische Operationen an den Zeichenfolgen aus:

    $num = "10" + 1;
    $num = floor("10.1");
    
  3. Verwenden Sie intval()oder floatval():

    $num = intval("10");
    $num = floatval("10.1");
    
  4. Verwenden Sie settype().

Fardjad
quelle
9
Beachten Sie, dass dies (double)nur ein Alias ​​für ist (float).
Täuschung
4
@downvoter, ich weiß nicht, was mit meiner Antwort falsch ist. Beachten Sie, dass ich dies gepostet habe, bevor OP ihre Frage bearbeitet hat, dies gilt jedoch auch für die bearbeitete Frage ( $num = "10" + 1Beispiel).
Fardjad
2
@ ed-ta: ziemlich sicher, dass es einen Min / Max-Wert anstelle von 0 zurückgeben würde, wenn Sie Zeichenfolgen an ihn übergeben. Dh intval("9999999999")==2147483647.
Riv
6
intvalist nützlich, weil Sie es dann verwenden können, in array_map('intval', $arrayOfStrings);dem Sie mit Casting nichts anfangen können.
icc97
2
Anstatt $num = "10" + 1;es besser zu verwenden, $num = "10" * 1;da dies den Wert nicht ändert (neutrales Element der Multiplikation), ist dies im Wesentlichen so, toNumber(..)da der endgültige Typ durch das bestimmt wird, was zum Konvertieren der Zeichenfolge "10" -> (int) 10 erforderlich ist. "10.1" -> (float) 10.1;
Holly
57

Um Probleme zu vermeiden, versuchen Sie es intval($var). Einige Beispiele:

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34 (octal as starts with zero)
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26 (hex as starts with 0x)
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>
Gopeca
quelle
4
IMHO, dies ist die einzig richtige Antwort, da es die einzige ist, die den Radix der numerischen Zeichenfolge berücksichtigt. Alle Antworten (auch diejenigen, die eine benutzerdefinierte Funktion vorschlagen), die einfach eine Typumwandlung verwenden, schlagen fehl, wenn die numerische Zeichenfolge eine oder mehrere führende Nullen enthält und die Zeichenfolge NICHT als Zahl mit Oktalbasis gedacht ist.
Syntax Junkie
Irgendeine Idee, ob ich "12.7896" in konvertieren möchte 12.7896?
Agnes Palit
Verwenden Sie floatval (), um einen String in einen float zu konvertieren. floatval ("12.7896") wird 12.7896
gopeca
Warum ist das nicht die akzeptierte Antwort? Als PHP-Außenseiter wusste ich bereits, dass (int)$my_strdies nicht funktionieren würde, da ich mich speziell mit Strings-Likes befasste 01und 013als Basis 10 interpretieren wollte ... Also wollte ich eine Möglichkeit, die Basis explizit bereitzustellen.
Giacomo Alzetta
48

In jeder (lose) Sprache können Sie jederzeit eine Zeichenfolge in eine Zahl umwandeln, indem Sie eine Null hinzufügen.

Dies macht jedoch wenig Sinn, da PHP dies zum Zeitpunkt der Verwendung dieser Variablen automatisch tut und es zum Zeitpunkt der Ausgabe ohnehin in einen String umwandelt.

Beachten Sie, dass Sie möglicherweise gepunktete Zahlen als Zeichenfolgen beibehalten möchten, da diese nach dem Umwandeln in Float aufgrund der Art der Float-Zahlen möglicherweise unvorhersehbar geändert werden.

Ihr gesunder Menschenverstand
quelle
35
Es gibt viele Sprachen, in denen Sie eine Zeichenfolge nicht durch Hinzufügen einer Null in eine Zahl umwandeln können. Dies wird normalerweise eher als Fehler denn als gültige Methode zum Umwandeln angesehen :).
Jan Špaček
4
honzasp ist richtig, zum Beispiel in JavaScript typeof('123'+0)gibt 'string', weil '123'+0gibt '1230'.
Oriol
5
Beachten Sie, dass in PHP empfohlen wird, die meiste Zeit === Stilvergleiche zu verwenden. Wenn Sie also Ihre Daten vergleichen, kann es sehr wichtig sein, in welchem ​​Typ sie gespeichert sind.
Jonathon
Beachten Sie, dass Sie durch Hinzufügen einer Null nicht im eigentlichen Sinne "gießen", sondern im Grunde konvertieren.
CSᵠ
12
@oriol in Javascript müssen Sie die Zahl zu Null hinzufügen 0+'123', um zu erhalten123
Timo Huovinen
24

Sie können verwenden:

(int)(your value);

Oder Sie können verwenden:

intval(string)
noobie-php
quelle
Was passiert, wenn die eingegebene Nummer "2.3456" lautet? Wie erhalte ich 2.3456?
Sara
6
Die Frage betrifft auch Schwimmer.
Taseenb
Zeigen Sie mir 1 Zeile von OP, wo es Float sagt? Bevor Sie Kommentare und Abstimmungen abgeben, schauen Sie sich den Originalbeitrag an.
Noobie-Php
2
Das Beispiel zeigt Floats. Es wird gefragt, wie numerische Zeichenfolgen in numerische Werte (Floats und Ganzzahlen)
konvertiert werden sollen
Überprüfen Sie zuerst, ob es sich bei der Zahl um ein Float mit handelt is_float, und wenn dies der Fall ist, setzen Sie (float)statt mit (int).
Martin van Driel
24

Wenn Sie einen Float für $value = '0.4', aber int für erhalten möchten $value = '4', können Sie schreiben:

$number = ($value == (int) $value) ? (int) $value : (float) $value;

Es ist ein bisschen schmutzig, aber es funktioniert.

Aleksei Akireikin
quelle
3
Möglicherweise weniger schmutzig? strpos($val, '.') === false ? intval($val) : floatval($val);
Jchook
4
@jchook Möglicherweise schmutziger, weil es vom Gebietsschema abhängig ist - z. B. '0,4' anstelle von '0,4'.
Nick Rice
Guter Punkt. Ich nehme an, Sie könnten localeconv()['decimal_point']anstelle von verwenden '.'. Ein Vorteil der strposLösung ist, dass sie fast doppelt so schnell ist wie zweimaliges Gießen.
Jchook
2
@jchook, das in Fällen wie bricht 2.1e2, es hat Dezimalpunkt, aber die resultierende Zahl ist Ganzzahl
Tomáš Blatný
1
Verwenden Sie einfach den +Identitätsoperator : var_dump(+'0.4', +'4'), erhalten Sie einen Float und einen Int. php.net/manual/en/language.operators.arithmetic.php
tvanc
15

Sie können immer Null hinzufügen!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)
Boykodev
quelle
Ich habe diesen Fehler bekommen A non well formed numeric value encountered. irgendeine Idee?
Agnes Palit
15

Anstatt auswählen zu müssen, ob das stringin intoder konvertiert werden soll float, können Sie einfach ein hinzufügen 0, und PHP konvertiert das Ergebnis automatisch in einen numerischen Typ.

// Being sure the string is actually a number
if (is_numeric($string))
    $number = $string + 0;
else // Let the number be 0 if the string is not a number
    $number = 0;
webNeat
quelle
13

In PHP können Sie intval(string) or floatval(string)Funktionen verwenden, um Zeichenfolgen in Zahlen umzuwandeln.

Kashif Khan
quelle
4
Nein, ich möchte eine gemeinsame Methode. Das heißt, wenn seine '5' => in 5 konvertiert werden soll und wenn seine '2.345' => in 2.345 konvertiert werden soll.
Sara
13

Ja, es gibt eine ähnliche Methode in PHP, aber es ist so wenig bekannt, dass Sie selten davon hören werden. Es ist ein arithmetischer Operator namens " Identität ", wie hier beschrieben:

Aritmetische Operatoren

Gehen Sie wie folgt vor, um eine numerische Zeichenfolge in eine Zahl umzuwandeln:

$a = +$a;
Aldemarcalazane
quelle
Warnung: Hack erkannt.
Greg
Hallo Greg. Haben Sie auf den hier geposteten Link geklickt? Dies ist, was die Entwickler über diesen Operator gesagt haben: Konvertierung von $ a in int oder float je nach Bedarf. "Umwandlung" kann hier nicht als Umwandlung von Zahl zu Zahl verstanden werden. Warum? Denn aus exklusiver arithmetischer Sicht ist dieser Operator absolut nutzlos! Das Multiplizieren einer beliebigen Zahl mit "+1" (das Äquivalent der Identitätsfunktion) hat absolut keine Auswirkung darauf. Daher kann ich mir für diesen Operator kein anderes Dienstprogramm als die hier vorgeschlagene Typkonvertierung vorstellen.
Aldemarcalazans
@ Greg - das ist sicherlich weniger ein Hack als die meisten anderen Antworten. Es ist ein eingebauter Operator, der genau das tut, was angefordert wurde. (Obwohl es wahrscheinlich am besten ist, zuerst zu überprüfen is_numeric, sollten Sie also einen Platz zum Einfügen von Code für Zeichenfolgen haben, die nicht korrekt konvertiert werden können.)
ToolmakerSteve
Ich verstehe, dass es perfekt funktioniert, einen arithmetischen Operator für das Casting zu verwenden, aber es ist wirklich leicht zu übersehen. Ich denke, es ist eine Warnung wert.
Greg
11

Nur eine kleine Anmerkung zu den Antworten, die in einigen Fällen nützlich und sicherer sein können. Möglicherweise möchten Sie zuerst überprüfen, ob die Zeichenfolge tatsächlich einen gültigen numerischen Wert enthält, und ihn dann erst in einen numerischen Typ konvertieren (z. B. wenn Sie Daten aus einer Datenbank bearbeiten müssen, die Ints in Zeichenfolgen konvertiert). Sie können verwenden is_numeric()und dann floatval():

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type
taseenb
quelle
9

Hier ist die Funktion, die das erreicht, wonach Sie suchen. Zuerst prüfen wir, ob der Wert als Zahl verstanden werden kann, wenn ja, verwandeln wir ihn in ein int und ein float. Wenn int und float gleich sind (z. B. 5 == 5.0), geben wir den int-Wert zurück. Wenn int und float nicht identisch sind (z. B. 5! = 5.3), gehen wir davon aus, dass Sie die Genauigkeit des float benötigen und diesen Wert zurückgeben. Wenn der Wert nicht numerisch ist, geben wir eine Warnung aus und geben null zurück.

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}
CogSciGradStudent
quelle
6

Ich habe festgestellt, dass in JavaScript eine einfache Möglichkeit, eine Zeichenfolge in eine Zahl umzuwandeln, darin besteht, sie mit 1 zu multiplizieren. Dadurch wird das Verkettungsproblem behoben, da das Symbol "+" in JavaScript mehrfach verwendet wird, während das Symbol "*" rein ist zur mathematischen Multiplikation.

Basierend auf dem, was ich hier gesehen habe, dass PHP automatisch bereit ist, eine Ziffern enthaltende Zeichenfolge als Zahl zu interpretieren (und den Kommentaren zum Hinzufügen, da in PHP das "+" nur zur mathematischen Addition dient), funktioniert dieser Multiplikationstrick einwandfrei auch für PHP.

Ich habe es getestet und es funktioniert ... Obwohl es davon abhängt, wie Sie den String erworben haben, möchten Sie möglicherweise die Funktion trim () darauf anwenden, bevor Sie mit 1 multiplizieren.

vernonner3voltazim
quelle
6

Hier ist eine Funktion, die ich geschrieben habe, um die Dinge für mich selbst zu vereinfachen:

Es werden auch Kurzversionen von Boolean, Integer, Double und Real zurückgegeben.

function type($mixed, $parseNumeric = false)
{        
    if ($parseNumeric && is_numeric($mixed)) {
        //Set type to relevant numeric format
        $mixed += 0;
    }
    $t = gettype($mixed);
    switch($t) {
        case 'boolean': return 'bool'; //shorthand
        case 'integer': return 'int';  //shorthand
        case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
        default: return $t;
    }
}

Wenn Sie type mit parseNumeric auf true aufrufen, werden numerische Zeichenfolgen konvertiert, bevor der Typ überprüft wird.

Somit:

Typ ("5", true) gibt int zurück

Typ ("3.7", true) gibt float zurück

Typ ("500") gibt eine Zeichenfolge zurück

Seien Sie vorsichtig, da dies eine Art falsche Überprüfungsmethode ist und Ihre tatsächliche Variable immer noch eine Zeichenfolge ist. Bei Bedarf müssen Sie die tatsächliche Variable in den richtigen Typ konvertieren. Ich brauchte es nur, um zu überprüfen, ob die Datenbank eine Element-ID oder einen Alias ​​laden sollte, damit keine unerwarteten Auswirkungen auftreten, da sie zur Laufzeit ohnehin als Zeichenfolge analysiert wird.

Bearbeiten

Wenn Sie erkennen möchten, ob Objekte Funktionen sind, fügen Sie diesen Fall dem Schalter hinzu:

case 'object': return is_callable($mixed)?'function':'object';
Dieter Gribnitz
quelle
6

Zusätzlich zu Boykodevs Antwort schlage ich Folgendes vor:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)
Drugan
quelle
Nachdem ich ein wenig darüber nachgedacht habe, kann ich auch vorschlagen, durch 1 zu
teilen
1
Das ist ein Argument! :) Übrigens ist Ihre Lösung viel besser als alle oben genannten wissenschaftlichen Notationen . Vielen Dank.
Drugan
Diese Lösung löste mein Problem. In meinem Fall $id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;anstelle von $ target_id_cron = (int) $ id_cron - 1;
inMILD
1
Ich habe diesen Fehler erhalten, A non well formed numeric value encounteredwenn ich den String in float ändern möchte $num = '12,24' * 1. Irgendein Vorschlag?
Agnes Palit
5
$a = "10";

$b = (int)$a;

Sie können dies verwenden, um eine Zeichenfolge in ein int in PHP zu konvertieren .

Pritom
quelle
2
Wenn die eingegebene Nummer '7.2345' ist, kann ich (int) nicht verwenden, dann muss ich (float) verwenden. Was ich brauche, ist eine allgemeine Lösung.
Sara
1
Sie können immer double oder float verwenden.
Pritom
5

Sie können einfach so schreiben:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>
Dominic Amal Joe F.
quelle
3
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Alex Riabov
1
Bist du dir da sicher? Dies konvertiert keine Zeichenfolge in eine Zahl, sondern ein Array in eine JSON-Zeichenfolge
Nico Haase
Ja, @NicoHaase Wenn die Zahl in einem Array im Zeichenfolgenformat vorliegt, wird sie in eine Zahl konvertiert.
Dominic Amal Joe F
5

Multiplizieren Sie die Zahl nur mit 1, damit die Zeichenfolge in die Typennummer konvertiert wird.

//String value
$string = "5.1"
if(is_numeric($string)){
  $numeric_string = $string*1;
}
rolodef
quelle
Fair genug, aber diese Methode (und ähnliche Tricks) sind bereits in den 24 anderen Antworten auf diese Frage aufgeführt - ich sehe den Wert nicht darin, sie erneut zu veröffentlichen.
DavidW
4

Sie können verwenden:

((int) $var)   ( but in big number it return 2147483647 :-) )

Die beste Lösung ist jedoch:

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

Oder

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;
Mehdi Ajdari
quelle
2

Sie können den Datentyp wie folgt ändern

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

Aus historischen Gründen wird im Falle eines Floats "double" zurückgegeben.

PHP-Dokumentation

David Lozano
quelle
2

Alle Vorschläge verlieren den numerischen Typ.

Dies scheint mir eine bewährte Methode zu sein:

function str2num($s){
// Returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}
Rocco Galasso
quelle
1

PHP erledigt das für Sie in Grenzen

<?php
   $str = "3.148";
   $num = $str;

   printf("%f\n", $num);
?>
Adrian Cornish
quelle
Ich will es nicht ausdrücken. Ich möchte es konvertieren und in einer Variablen speichern.
Sara
1
Dies wandelte es automatisch in einen Schwimmer um. Die lose Typkonvertierung von PHP erledigt dies für Sie. Obwohl es möglicherweise nicht das tut, was Sie erwarten, funktionieren die anderen Antworten mit expliziter Konvertierung möglicherweise besser für Sie.
Adrian Cornish
$ str can enthält '5' oder '5.258' mit printf ("% f \ n", $ str) '5' wird als 5.000000 (ich möchte es als 5) für 5.280000 (ich möchte es als 5.28) ausgegeben mehr Dezimalstellen.
Sara
1

Da ist ein Weg:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

Die Verwendung is_*funktioniert nicht, da dies variableein : string.

Mit der Kombination von json_encode()und dann wird json_decode()es in seine "wahre" Form konvertiert. Wenn es wahr stringist, würde es falsch ausgeben.

$num = "Me";
$int = (int)$num;
$float = (float)$num;

var_dump($num, $int, $float);

Wird ausgegeben: string(2) "Me" int(0) float(0)

Anuga
quelle
0

Ich habe in einem Programmierinterview die Frage "Sagen Sie, Sie haben die eingebaute Funktion zum Umwandeln einer Ganzzahl in einen String in PHP geschrieben, wie würden Sie diese Funktion schreiben". Hier ist eine Lösung.

$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939; 
$string = ""; 
while ($int) { 
    $string .= $nums[$int % 10]; 
    $int = (int)($int / 10); 
} 
$result = strrev($string);
Brendan
quelle
0

Ich habe die Antworten durchgelesen und niemanden gesehen, der die größte Einschränkung bei der Konvertierung von PHP-Nummern erwähnt hat.

Die am besten bewertete Antwort schlägt Folgendes vor:

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

Das ist hervorragend. PHP macht direktes Casting. Aber was wäre, wenn wir Folgendes tun würden?

$str = "3.14is_trash"
$intstr = (int)$str

Betrachtet PHP solche Konvertierungen als gültig?

Anscheinend ja .

PHP liest die Zeichenfolge, bis das erste nicht numerische Zeichen für den erforderlichen Typ gefunden wird. Dies bedeutet, dass für Ganzzahlen numerische Zeichen [0-9] sind. Infolgedessen liest es weiter 3, da es sich im Zeichenbereich [0-9] befindet. Liest .und stoppt dort, da es nicht im Bereich [0-9] liegt.

Das Gleiche würde passieren, wenn Sie schweben oder verdoppeln würden. PHP würde 3dann ., dann 1, dann lesen 4und anhalten, ida es kein gültiges numerisches Float-Zeichen ist.

Infolgedessen wird als "million" >= 1000000falsch "1000000million" >= 1000000ausgewertet , jedoch als true.

Siehe auch:

https://www.php.net/manual/en/language.operators.comparison.php wie Konvertierungen beim Vergleichen durchgeführt werden

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion wie Zeichenfolgen in entsprechende Zahlen konvertiert werden

Dragas
quelle
0

Wenn Sie nicht im Voraus wissen, ob Sie ein Gleitkomma oder eine Ganzzahl haben
und ob die Zeichenfolge Sonderzeichen (wie Leerzeichen, € usw.) enthalten kann
und ob sie mehr als 1 Punkt oder Komma enthalten kann, können
Sie dies verwenden Funktion:

// This function strip spaces and other characters from a string and return a number.
// It works for integer and float.
// It expect decimal delimiter to be either a '.' or ','
// Note: everything after an eventual 2nd decimal delimiter will be removed.
function stringToNumber($string) {
    // return 0 if the string contains no number at all or is not a string:
    if (!is_string($string) || !preg_match('/\d/', $string)) {
        return 0;
    } 

    // Replace all ',' with '.':
    $workingString = str_replace(',', '.', $string);

    // Keep only number and '.':
    $workingString = preg_replace("/[^0-9.]+/", "", $workingString);

    // Split the integer part and the decimal part,
    // (and eventually a third part if there are more 
    //     than 1 decimal delimiter in the string):
    $explodedString = explode('.', $workingString, 3);

    if ($explodedString[0] === '') {
        // No number was present before the first decimal delimiter, 
        // so we assume it was meant to be a 0:
        $explodedString[0] = '0';
    } 

    if (sizeof($explodedString) === 1) {
        // No decimal delimiter was present in the string,
        // create a string representing an integer:
        $workingString = $explodedString[0];
    } else {
        // A decimal delimiter was present,
        // create a string representing a float:
        $workingString = $explodedString[0] . '.' .  $explodedString[1];
    }

    // Create a number from this now non-ambiguous string:
    $number = $workingString * 1;

    return $number;
}
user1657853
quelle
-8

Anderer Ansatz:

  1. Schieben Sie alles in ein Array / assoziatives Array.
  2. json_encode($your_array, JSON_NUMERIC_CHECK); optional dekodieren Sie es zurück
  3. ?
  4. Profitieren!
Peter Mortensen
quelle
7
Beim Stapelüberlauf geht es um Antworten auf Fragen, nicht um Witze. Ich bin mir sicher, dass es dafür einen Ort gibt, aber dieser Ort ist es nicht.