Wie konvertiere ich einen String in eine Zahl in PHP?

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

 Input Output '2' 2 '2.34' 2.34 '0.3454545' 0.3454545 

Normalerweise müssen Sie das nicht tun, da PHP in den meisten Fällen den Typ für Sie erzwingt. Für Situationen, in denen Sie den Typ explizit konvertieren möchten, müssen Sie ihn umsetzen:

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

Es gibt einige Möglichkeiten, dies zu tun:

  1. Konvertieren Sie die Zeichenfolgen in numerische primitive Datentypen:

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

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

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

In welcher Sprache auch immer (locker typisierte) können Sie immer eine Zeichenfolge in eine Zahl umwandeln, indem Sie eine Null hinzufügen.

Dies ist jedoch sehr wenig sinnvoll, da PHP es zum Zeitpunkt der Verwendung dieser Variablen automatisch ausführt und zum Zeitpunkt der Ausgabe trotzdem in eine Zeichenfolge umgewandelt wird.

Beachten Sie, dass Sie die punktierten Zahlen möglicherweise als Strings beibehalten möchten, da sie nach dem Casting zu Float aufgrund der Natur der Gleitkommazahlen unvorhersehbar geändert werden können.

Um Probleme zu vermeiden, versuchen Sie es mit 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 ?> 

Sie können verwenden:

 (int)(your value); 

Oder Sie können verwenden:

 intval(string) 

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

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

Etwas schmutzig, aber es funktioniert.

Sie können zum Beispiel (int)_value_ .

 $string = '100'; $int = (int)$string; 

Siehe Typ Jonglieren .

In PHP können Sie intval(string) or floatval(string) -functionen verwenden, um Strings in Zahlen zu konvertieren.

Nur eine kleine Anmerkung zu den Antworten, die in einigen Fällen nützlich und sicherer sein können. Vielleicht möchten Sie überprüfen, ob die Zeichenfolge tatsächlich einen gültigen numerischen Wert enthält, und erst dann in einen numerischen Typ umwandeln (z. B. wenn Sie Daten bearbeiten müssen, die von einer db kommen, die Ints in Zeichenfolgen konvertiert). Sie können 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 

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) 

Anstatt Wetter wählen zu müssen, um die string in int oder float zu konvertieren. Sie können einfach eine 0 hinzufügen 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's the number be 0 if the string is not a number $number = 0; 

Ich habe festgestellt, dass in JavaScript eine einfache Möglichkeit, eine Zeichenfolge in eine Zahl zu konvertieren, es mit 1 multipliziert. Es triggers das Verkettungsproblem, da das Symbol “+” in JavaScript mehrere verwendet, während das Symbol “*” rein ist für mathematische Multiplikation.

Basierend auf dem, was ich hier gesehen habe, dass PHP automatisch dazu bereit ist, eine Ziffern enthaltende Zahl als Zahl zu interpretieren (und die Kommentare zum Hinzufügen, da in PHP das “+” rein mathematisch ist), funktioniert dieser Multiplikations-Trick gut auch für PHP.

Ich habe es getestet, und es funktioniert … Obwohl es abhängig davon, wie Sie die Zeichenfolge erworben haben, möchten Sie möglicherweise die function trim () anwenden, bevor Sie mit 1 multiplizieren.

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

Es gibt auch Kurzversionen von Boolean, Integer, Double und Real zurück.

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

Beim Aufrufen von type mit parseNumeric auf true werden numerische Zeichenfolgen vor dem Überprüfungstyp konvertiert.

So:

type (“5”, true) gibt int zurück

type (“3.7”, true) gibt float zurück

type (“500”) gibt die Zeichenfolge zurück

Seien Sie vorsichtig, da dies eine Art von falscher Prüfmethode ist und Ihre tatsächliche Variable immer noch eine Zeichenfolge ist. Sie müssen die tatsächliche Variable bei Bedarf in den richtigen Typ konvertieren. Ich brauchte es nur, um zu überprüfen, ob die database eine Artikel-ID oder einen Alias ​​laden sollte, also keine unerwarteten Effekte hatte, da sie sowieso zur Laufzeit als String geparst wird.

Bearbeiten

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

 case 'object': return is_callable($mixed)?'function':'object'; 

Hier ist die function, die das erreicht, wonach Sie suchen. Zuerst prüfen wir, ob der Wert als Zahl verstanden werden kann, wenn ja, machen wir daraus einen int und einen float. Wenn int und float gleich sind (z. B. 5 == 5.0), geben wir den int-Wert zurück. Wenn int und float nicht gleich sind (z. B. 5! = 5.3), nehmen wir an, dass Sie die Genauigkeit des Floats benötigen und diesen Wert zurückgeben. Wenn der Wert nicht numerisch ist, wird eine Warnung ausgegeben und null zurückgegeben.

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

Neben der Antwort von Boykodev empfehle ich Folgendes :

 Input Output '2' * 1 2 (int) '2.34' * 1 2.34 (float) '0.3454545' * 1 0.3454545 (float) 
 $a = "10"; $b = (int)$a; 

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

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; 

Verwenden Sie etwas wie folgt:

 < ?php $string='5';// $ string is a variable to hold string '5' $int=intval($string);// $int is the converted string to integer $int=intval('5'); echo$int;//5 ?> 
  $num = "3.14"; $int = (int)$num; // output = 3 $float = (float)$num; // output = 3.14 $double = (double)$num; // output = 3.14 

Sie können einen String in eine Zahl in PHP konvertieren, indem Sie cast verwenden.

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

Für Ihren speziellen Fall könnten Sie einfach mit 1 multiplizieren, um die Zeichenfolge in php in Zahl zu konvertieren. PHP kümmert sich automatisch um Floating und Integer.

 $num = "2.12"; var_dump(is_float($num)); //bool(false) var_dump(is_int($num)); //bool(false) var_dump(is_string($num)); //bool(true) $num = $num*1; var_dump(is_float($num)); //bool(true) var_dump(is_int($num)); //bool(false) var_dump(is_string($num)); //bool(false) 

PHP wird es in Grenzen tun

 < ?php $str="3.148"; $num=$str; printf("%f\n", $num); ?> 

Alle Vorschläge verlieren den numerischen Typ Dies scheint mir eine Best Practice

 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"; } 

Sie können einfach die function intval () verwenden, um die Zeichenfolge in int zu konvertieren

Ja, es gibt eine ähnliche Methode in PHP, aber es ist so wenig bekannt, dass Sie selten davon erfahren werden. Es ist ein arithmetisches Operatoren namens ” Identität “, wie hier beschrieben:

Aritmetische Operatoren

Um eine numerische Zeichenfolge in eine Zahl zu konvertieren, gehen Sie wie folgt vor:

 $a = +$a; 

Einfach kann man so schreiben:

 < ?php $data = ["1","2","3","4","5"]; echo json_encode($data, JSON_NUMERIC_CHECK); ?> 

Ich habe die Frage “Sagen Sie, dass Sie die eingebaute function zum Umwandeln einer Ganzzahl in eine Zeichenfolge in PHP geschrieben haben, wie würden Sie diese function schreiben” in einem Programmierinterview. 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); 
 $a = "7.2345"; $b = round(((float)$a),0); 

Unterschiedlicher 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!