2017-05-26 103 views
0

我试图将"2,249.90000000"解析成带局部小数点的浮点数。 我想要它2249,90000000. (nl_NL, money/eur)PHP字符串到语言环境浮点数

我已经尝试了多种解决方案,如floatval或(浮动)。因为number_format需要一个数字而不是一个字符串。

我没有在SO上找到正确的解决方案,所以我创建了一个新问题,但我意识到这个问题有一次提出。

+0

什么是你想要的区域设置想要的吗? – Raptor

+0

@Raptor nl_NL。在这种情况下,它是欧元。 (我会将它添加到问题中) – NVO

+0

不是'2249.90000000'? –

回答

1

您可以使用此代码,代码从第一个音符的floatval manual

如果您在2249,90000000检查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

冉这并得到'float(2249.9)' –

+0

@JuanMendes,删除floatval将导致相同长度的字符串格式。如果使用floatval,这里需要填充到相同的长度。 –

0

我编辑我以前的答案,因为它是不正确的:

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

这不是要输出224,990,000,000吗? –

+0

你是对的胡安门德斯,我没有测试它...只是编辑一个更容易和工作的一个 –