Hoe converteer ik een string naar een getal in PHP?

Ik wil dit soort waarden, '3', '2.34', '0.234343', etc. converteren naar een getal . In JavaScript kunnen we Number()gebruiken, maar is er een vergelijkbare methode beschikbaar in PHP?

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

Antwoord 1, autoriteit 100%

U hoeft dit normaal gesproken niet te doen, aangezien PHP in de meeste gevallen het type voor u zal afdwingen. Voor situaties waarin u het type expliciet wilt converteren, casthet:

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

Antwoord 2, autoriteit 17%

Er zijn een paar manieren om dit te doen:

  1. Creëer de tekenreeksen naar numerieke primitieve gegevenstypen:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. Voer wiskundige bewerkingen uit op de snaren:

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

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


Antwoord 3, autoriteit 6%

Om problemen te voorkomen, probeer intval($var). Enkele voorbeelden:

<?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
?>

Antwoord 4, autoriteit 4%

In welke (losjes getypte) taal je altijd een string naar een getal kunt casten door er een nul aan toe te voegen.

Dit heeft echter weinig zin, aangezien PHP dit automatisch zal doen op het moment dat deze variabele wordt gebruikt, en het zal hoe dan ook naar een string worden gecast op het moment van uitvoer.

Houd er rekening mee dat je gestippelde getallen misschien als tekenreeksen wilt behouden, omdat het na het casten naar float onvoorspelbaar kan worden gewijzigd vanwege de aard van float-nummers.


Antwoord 5, autoriteit 2%

Als je een float wilt voor $value = '0.4', maar int voor $value = '4', kun je schrijven:

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

Het is een beetje vies, maar het werkt.


Antwoord 6, Autoriteit 2%

In plaats van te moeten kiezen of u de stringwilt converteren naar intof float, kunt u eenvoudig een 0Naar IT en PHP converteert het resultaat automatisch naar een numeriek type.

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

Antwoord 7, Autoriteit 2%

U kunt gebruiken:

(int)(your value);

of u kunt gebruiken:

intval(string)

Antwoord 8, Autoriteit 2%

Ja, er is een vergelijkbare methode in PHP, maar het is zo weinig bekend dat je er zelden over zult horen. Het is een rekenkundige operator genaamd “identiteit “, zoals hier beschreven:

aritmetische operators

Om een ​​numerieke reeks naar een getal te converteren, doet u als volgt:

$a = +$a;

Antwoord 9, Autoriteit 2%

U kunt er altijd nul toevoegen!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)

Antwoord 10

in PHP U kunt intval(string) or floatval(string)Functies om strings naar getallen te converteren.


Antwoord 11

Een kleine opmerking bij de antwoorden die in sommige gevallen nuttig en veiliger kunnen zijn.
Misschien wilt u eerst controleren of de tekenreeks daadwerkelijk een geldige numerieke waarde bevat en deze dan pas naar een numeriek type converteren (bijvoorbeeld als u gegevens moet manipuleren die afkomstig zijn van een db die ints naar tekenreeksen converteert). U kunt is_numeric()gebruiken en vervolgens floatval():

$a = "whatever"; // any variable
if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type

Antwoord 12

Hier is de functie die bereikt wat u zoekt. Eerst controleren we of de waarde als een getal kan worden begrepen, zo ja, dan maken we er een int en een float van. Als de int en float hetzelfde zijn (bijv. 5 == 5,0), retourneren we de int-waarde. Als de int en float niet hetzelfde zijn (bijv. 5 != 5,3) dan nemen we aan dat je de precisie van de float nodig hebt en retourneren die waarde. Als de waarde niet numeriek is, geven we een waarschuwing en retourneren null.

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

Antwoord 13

Als je de numerieke waarde van een string wilt en deze niet wilt converteren naar float/int omdat je het niet zeker weet, zal deze truc hem naar het juiste type converteren:

function get_numeric($val) {
  if (is_numeric($val)) {
    return $val + 0;
  }
  return 0;
}
Example:
<?php
get_numeric('3'); // int(3)
get_numeric('1.2'); // float(1.2)
get_numeric('3.0'); // float(3)
?>

Bron: https://www.php.net/ manual/en/function.is-numeric.php#107326


Antwoord 14

In aanvulling op Boykodev’s antwoordIk stel dit voor:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)

Antwoord 15

Hier is een functie die ik heb geschreven om dingen voor mezelf te vereenvoudigen:

Het geeft ook verkorte versies van boolean, integer, double en real terug.

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

Aanroeptype met parseNumeric ingesteld op true converteert numerieke tekenreeksen voordat het type wordt gecontroleerd.

Dus:

type(“5”, true) retourneert int

type(“3.7”, true) geeft float terug

type(“500”) geeft string terug

Wees voorzichtig, want dit is een soort valse controlemethode en uw werkelijke variabele zal nog steeds een string zijn. U moet de werkelijke variabele indien nodig naar het juiste type converteren. Ik had het alleen nodig om te controleren of de database een item-ID of alias zou moeten laden, en dus geen onverwachte effecten zou hebben, omdat het sowieso tijdens runtime als string wordt geparseerd.

Bewerken

Als je wilt detecteren of objecten functies zijn, voeg dan dit geval toe aan de schakelaar:

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

Antwoord 16

Vermenigvuldig het getal alleen met 1 zodat de tekenreeks wordt geconverteerd naar het type getal.

//String value
$string = "5.1"
if(is_numeric($string)){
  $numeric_string = $string*1;
}

Antwoord 17

Ik heb ontdekt dat in JavaScript een eenvoudige manier om een tekenreeks naar een getal te converteren is door deze met 1 te vermenigvuldigen. Het lost het aaneenschakelingsprobleem op, omdat het “+”-symbool meerdere toepassingen heeft in JavaScript, terwijl de “*” symbool is puur voor wiskundige vermenigvuldiging.

Op basis van wat ik hier heb gezien met betrekking tot PHP die automatisch bereid is een tekenreeks met cijfers als een getal te interpreteren (en de opmerkingen over optellen, aangezien in PHP de “+” puur voor wiskundige optelling is), is deze vermenigvuldigingstruc werkt ook prima voor PHP.

Ik heb het getest, en het werkt… Hoewel je, afhankelijk van hoe je de string hebt verkregen, misschien de functie trim() erop wilt toepassen, voordat je vermenigvuldigt met 1.


Antwoord 18

Ik heb de antwoorden gelezen en zag niemand het grootste voorbehoud noemen bij de nummerconversie van PHP.

Het meest gewaardeerde antwoord suggereert het volgende te doen:

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

Dat is briljant. PHP doet direct casting. Maar wat als we het volgende zouden doen?

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

Beschouwt PHP dergelijke conversies als geldig?

Blijkbaar ja.

PHP leest de tekenreeks totdat het eerste niet-numerieke teken voor het vereiste type wordt gevonden. Dit betekent dat voor gehele getallen de numerieke tekens [0-9] zijn. Als resultaat leest het 3, aangezien het binnen het [0-9] tekenbereik is, gaat het verder met lezen. Leest .en stopt daar omdat het niet in [0-9] bereik is.

Hetzelfde zou gebeuren als je zou casten om te floaten of te verdubbelen. PHP zou 3lezen, dan ., dan 1, dan 4, en zou stoppen bij iomdat het geen geldig numeriek teken is.

Als resultaat evalueert "million" >= 1000000tot onwaar, maar "1000000million" >= 1000000evalueert tot true.

Zie ook:

https://www.php.net/manual/en /language.operators.comparison.phphoe conversies worden gedaan tijdens het vergelijken

https://www .php.net/manual/en/language.types.string.php#language.types.string.conversionhoe strings worden geconverteerd naar respectievelijke getallen


Antwoord 19

$a = "10";
$b = (int)$a;

Je kunt dit gebruiken om een string om te zetten naar een int in PHP.


Antwoord 20

U kunt gebruiken:

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

Maar de beste oplossing is om te gebruiken:

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

Of

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

Antwoord 21

Je kunt gewoon zo schrijven:

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

Antwoord 22

Laat op het feest, maar hier is een andere benadering:

function cast_to_number($input) {
    if(is_float($input) || is_int($input)) {
        return $input;
    }
    if(!is_string($input)) {
        return false;
    }
    if(preg_match('/^-?\d+$/', $input)) {
        return intval($input);
    }
    if(preg_match('/^-?\d+\.\d+$/', $input)) {
        return floatval($input);
    }
    return false;
}
cast_to_number('123.45');       // (float) 123.45
cast_to_number('-123.45');      // (float) -123.45
cast_to_number('123');          // (int) 123
cast_to_number('-123');         // (int) -123
cast_to_number('foo 123 bar');  // false

Antwoord 23

U kunt het gegevenstype als volgt wijzigen

$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float

Om historische redenen wordt “dubbel” geretourneerd in het geval van een float.

PHP-documentatie


Antwoord 24

Er is een manier:

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

Het gebruik van is_*zal niet werken, aangezien de variableeen: stringis.

Met behulp van de combinatie van json_encode()en vervolgens json_decode()wordt het geconverteerd naar zijn “echte” vorm. Als het een echte stringis, zou het verkeerd worden weergegeven.

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

Zal uitvoeren: string(2) "Me" int(0) float(0)


Antwoord 25

PHP doet het binnen de perken voor u

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

Antwoord 26

Alle suggesties verliezen het numerieke type.

Dit lijkt mij een 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";
}

Antwoord 27

Als je niet van tevoren weet of je een float of een integer hebt,
en als de reeks speciale tekens (zoals ruimte, €, enz.) kan bevatten,
en als het meer dan 1 stip of komma kan bevatten,
U kunt deze functie gebruiken:

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

Antwoord 28

//Get Only number from string
$string = "123 Hello Zahid";
$res = preg_replace("/[^0-9]/", "", $string);
echo $res."<br>";
//Result 123

Antwoord 29

Een van de vele manieren waarop dit kan worden bereikt, is deze:

$fileDownloadCount          =  (int) column_data_from_db;
$fileDownloadCount++;

De tweede regel verhoogt de waarde met 1.


Antwoord 30

Ik kreeg de vraag “stel dat je de ingebouwde functie aan het schrijven bent voor het casten van een geheel getal naar een string in PHP, hoe zou je die functie schrijven” in een programmeerinterview. Hier is een oplossing.

$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);

Other episodes