942 Stimmen

Wie konvertiere ich in PHP einen String in eine Zahl?

Ich möchte diese Arten von Werten konvertieren, '3' , '2.34' , '0.234343' usw. zu einer 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

99 Stimmen

Leser aufgepasst: Es gibt keine wirkliche Antwort auf diese Frage :(

1 Stimmen

@MatthieuNapoli Die Antwort ist, dass Php es normalerweise für Sie herausfindet - einer der Vorteile eines dynamischen Typsystems.

18 Stimmen

Mit all den Ketten der Ungewissheit und dem "normalerweise".

1443voto

deceze Punkte 489288

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 wollen, gießen es:

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

10 Stimmen

Hier ist die Situation etwas anders, ich möchte eine beliebige Zeichenfolge (enthält nur Zahlen) in eine allgemeine Zahl konvertieren. Wie Sie vielleicht wissen, können wir in JavaScript Folgendes verwenden parseInt() um string=>int zu konvertieren oder parseFloat() um string=>float zu konvertieren. Aber im Allgemeinen verwendet JavaScript Number() um string => number zu konvertieren. Ich möchte eine ähnliche Methode in php?

1 Stimmen

@sara AFAIK gibt es keine eingebaute Funktion dafür, Sie müssten selbst eine erstellen, die zum Beispiel prüft, ob es eine . in der Zeichenkette. In diesem Fall wird sie in float . Aber auch dies ist in den meisten Fällen unnötig, eine Zeichenkette reicht völlig aus.

4 Stimmen

Es war nützlich für mich, wenn ich eine Monatsnummer aus einer vollständigen Datumszeichenfolge erhalten hatte, die ich verwendet, um einen Wert aus einem Mottennamen-Array zu ziehen. Auto-Casting geschieht hier nicht, weil String-Indizes gültig sind, aber nicht gleichwertig.

269voto

fardjad Punkte 19138

Es gibt mehrere Möglichkeiten, dies zu tun:

  1. Umwandlung der Zeichenketten in numerische primitive Datentypen:

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

    $num = "10" + 1;
    $num = floor("10.1");
  3. Utilice intval() o floatval() :

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

0 Stimmen

Nebenbei bemerkt gibt intval 0 zurück, wenn der Bereich in 32-Bit-Systemen außerhalb von -2147483648 bis 2147483647 liegt

2 Stimmen

@ed-ta: Ich bin mir ziemlich sicher, dass es Min/Max-Werte statt 0 zurückgeben würde, wenn man Strings übergibt. D.h.. intval("9999999999")==2147483647 .

0 Stimmen

Aber dann gibt es keine Möglichkeit, den Unterschied zu erkennen zwischen intval("0") y intval("foo") ?

94voto

gopeca Punkte 1395

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

8 Stimmen

IMHO ist dies die einzig richtige Antwort, weil es die einzige ist, die das Radix der numerischen Zeichenfolge berücksichtigt. Alle Antworten (auch die, die eine benutzerdefinierte Funktion vorschlagen), die einfach eine Typumwandlung verwenden, schlagen fehl, wenn die numerische Zeichenkette eine oder mehrere führende Nullen hat und die Zeichenkette NICHT als Zahl mit einer oktalen Basis gedacht ist.

1 Stimmen

Eine Idee, wie ich "12,7896" in eine andere Zahl umwandeln kann? 12.7896 ?

0 Stimmen

Verwenden Sie floatval(), um eine Zeichenkette in eine Fließkommazahl umzuwandeln. floatval("12,7896") liefert 12,7896

50voto

Your Common Sense Punkte 154708

In jeder (locker getippten) Sprache können Sie eine Zeichenkette immer in eine Zahl umwandeln, indem Sie eine Null anhängen.

Dies hat jedoch wenig Sinn, da PHP dies bei der Verwendung dieser Variablen automatisch tut und sie bei der Ausgabe ohnehin in einen String umgewandelt wird.

Beachten Sie, dass Sie gepunktete Zahlen als Zeichenketten aufbewahren sollten, da sie nach der Umwandlung in Float-Zahlen unvorhersehbar verändert werden können.

40 Stimmen

Es gibt viele Sprachen, in denen man eine Zeichenkette nicht in eine Zahl umwandeln kann, indem man eine Null hinzufügt; dies wird normalerweise als Fehler und nicht als gültige Methode der Umwandlung angesehen :).

5 Stimmen

Honzasp hat recht, zum Beispiel in JavaScript typeof('123'+0) gibt 'string' denn '123'+0 gibt '1230' .

5 Stimmen

Beachten Sie, dass in PHP empfohlen wird, die meiste Zeit Vergleiche im Stil === zu verwenden. Wenn Sie also Ihre Daten vergleichen wollen, kann es sehr wichtig sein, in welchem Typ sie gespeichert sind.

43voto

webNeat Punkte 2591

Anstatt sich entscheiden zu müssen, ob man die string a int o float können Sie einfach eine 0 zu, 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;

0 Stimmen

Dies funktionierte für mich zu json nur numerische Felder in Zahlen zu konvertieren

0 Stimmen

Perfekte Lösung, die es erlaubt, in einer Zeile von String zu Integer und Float zu konvertieren, ohne zu prüfen, ob sie das Trennzeichen enthält. Großartig, danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X