2017-05-26 1 views
0

J'essaye d'analyser "2,249.90000000" dans un flottant avec des décimales locales. Je le veux à 2249,90000000. (nl_NL, money/eur)Chaîne PHP flottante locale

J'ai essayé plusieurs solutions comme floatval ou (float). Parce que nombre_format veut un nombre et pas une chaîne.

Je n'ai pas trouvé la bonne solution sur SO donc, j'ai créé une nouvelle question, mais je suis conscient que cette question est posée une fois.

+0

Quel est le lieu que vous voulez? – Raptor

+0

@Raptor nl_NL. dans ce cas, c'est l'euro. (Je vais l'ajouter à la question) – NVO

+0

n'est pas '2249.90000000'? –

Répondre

1

Vous pouvez utiliser ce code, le code de la première note de floatval manual.

Si vous voulez en 2249,90000000 check this demo

<?php 
var_dump(tofloat("2,249.90000000")); 

function tofloat($num) { 
    $dotPos = strrpos($num, '.'); 
    $commaPos = strrpos($num, ','); 
    $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : 
     ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false); 

    if (!$sep) { 
     return floatval(preg_replace("/[^0-9]/", "", $num)); 
    } 

    return floatval(
     preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . '.' . 
     preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num))) 
    ); 
} 
+0

Ran cela et obtenu 'float (2249.9)' –

+0

@JuanMendes, retirer le floatval se traduira par le format de chaîne de même longueur . Si vous utilisez floatval, vous avez besoin d'un pad de même longueur. –

0

Je suis d'édition ma réponse précédente car il n'a pas été correcte:

$number = '2,249.90000000'; 
$number = floatval(str_replace(',','', $number)); 
echo $number; 
+0

Cela ne va pas à la sortie 224,990,000,000? –

+0

Vous avez raison Juan Mendes, je ne l'ai pas testé ... juste édité avec un plus facile et de travail –