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
php
casting
type-conversion
Sara
quelle
quelle
Antworten:
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:
quelle
.
das Dezimaltrennzeichen ist. en.wikipedia.org/wiki/…Es gibt einige Möglichkeiten, dies zu tun:
Wandeln Sie die Zeichenfolgen in numerische primitive Datentypen um:
Führen Sie mathematische Operationen an den Zeichenfolgen aus:
Verwenden Sie
intval()
oderfloatval()
:Verwenden Sie
settype()
.quelle
(double)
nur ein Alias für ist(float)
.$num = "10" + 1
Beispiel).intval("9999999999")==2147483647
.intval
ist nützlich, weil Sie es dann verwenden können, inarray_map('intval', $arrayOfStrings);
dem Sie mit Casting nichts anfangen können.$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;Um Probleme zu vermeiden, versuchen Sie es
intval($var)
. Einige Beispiele:quelle
12.7896
?(int)$my_str
dies nicht funktionieren würde, da ich mich speziell mit Strings-Likes befasste01
und013
als Basis 10 interpretieren wollte ... Also wollte ich eine Möglichkeit, die Basis explizit bereitzustellen.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.
quelle
typeof('123'+0)
gibt'string'
, weil'123'+0
gibt'1230'
.0+'123'
, um zu erhalten123
Sie können verwenden:
Oder Sie können verwenden:
quelle
is_float
, und wenn dies der Fall ist, setzen Sie(float)
statt mit(int)
.Wenn Sie einen Float für
$value = '0.4'
, aber int für erhalten möchten$value = '4'
, können Sie schreiben:Es ist ein bisschen schmutzig, aber es funktioniert.
quelle
strpos($val, '.') === false ? intval($val) : floatval($val);
localeconv()['decimal_point']
anstelle von verwenden'.'
. Ein Vorteil derstrpos
Lösung ist, dass sie fast doppelt so schnell ist wie zweimaliges Gießen.2.1e2
, es hat Dezimalpunkt, aber die resultierende Zahl ist Ganzzahl+
Identitätsoperator :var_dump(+'0.4', +'4')
, erhalten Sie einen Float und einen Int. php.net/manual/en/language.operators.arithmetic.phpSie können immer Null hinzufügen!
quelle
A non well formed numeric value encountered
. irgendeine Idee?Anstatt auswählen zu müssen, ob das
string
inint
oder konvertiert werden sollfloat
, können Sie einfach ein hinzufügen0
, und PHP konvertiert das Ergebnis automatisch in einen numerischen Typ.quelle
In PHP können Sie
intval(string) or floatval(string)
Funktionen verwenden, um Zeichenfolgen in Zahlen umzuwandeln.quelle
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:
quelle
is_numeric
, sollten Sie also einen Platz zum Einfügen von Code für Zeichenfolgen haben, die nicht korrekt konvertiert werden können.)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 dannfloatval()
:quelle
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.
quelle
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.
quelle
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.
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:
quelle
Zusätzlich zu Boykodevs Antwort schlage ich Folgendes vor:
quelle
$id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;
anstelle von $ target_id_cron = (int) $ id_cron - 1;A non well formed numeric value encountered
wenn ich den String in float ändern möchte$num = '12,24' * 1
. Irgendein Vorschlag?Sie können dies verwenden, um eine Zeichenfolge in ein int in PHP zu konvertieren .
quelle
Sie können einfach so schreiben:
quelle
Multiplizieren Sie die Zahl nur mit 1, damit die Zeichenfolge in die Typennummer konvertiert wird.
quelle
Sie können verwenden:
Die beste Lösung ist jedoch:
Oder
quelle
Sie können den Datentyp wie folgt ändern
Aus historischen Gründen wird im Falle eines Floats "double" zurückgegeben.
PHP-Dokumentation
quelle
Alle Vorschläge verlieren den numerischen Typ.
Dies scheint mir eine bewährte Methode zu sein:
quelle
PHP erledigt das für Sie in Grenzen
quelle
Da ist ein Weg:
Die Verwendung
is_*
funktioniert nicht, da diesvariable
ein :string
.Mit der Kombination von
json_encode()
und dann wirdjson_decode()
es in seine "wahre" Form konvertiert. Wenn es wahrstring
ist, würde es falsch ausgeben.Wird ausgegeben:
string(2) "Me" int(0) float(0)
quelle
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.
quelle
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:
Das ist hervorragend. PHP macht direktes Casting. Aber was wäre, wenn wir Folgendes tun würden?
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
3
dann.
, dann1
, dann lesen4
und anhalten,i
da es kein gültiges numerisches Float-Zeichen ist.Infolgedessen wird als
"million" >= 1000000
falsch"1000000million" >= 1000000
ausgewertet , jedoch alstrue
.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
quelle
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:
quelle
Anderer Ansatz:
json_encode($your_array, JSON_NUMERIC_CHECK);
optional dekodieren Sie es zurückquelle