2011-05-30 36 views
2


我有一个将字符串转换为浮点的问题。如何将字符串转换为浮动与“尾巴”?

print gettype($value[$id]); //returns string 

var_dump($value[$id]);//returns string '34,7140' (length=7) 

$float = floatval($value[$id]); 

print gettype($float);//returns double 

var_dump($float);//returns float 34 

echo $float;//returns 34 

我不明白为什么“34”?为什么$ float不是'34,7140'?
如何获得$ float = 34,7140?

回答

5

的问题是,浮动预计将在英文格式与.分离小数部分,而不是一个逗号。如果格式总是与单个逗号相同,请使用:

$float = (float)str_replace(',', '.', $value); 
+0

不会将千位分隔符变成小数点(即34.714)。应该完全删除逗号,不是吗? – Ben 2011-05-30 10:00:28

+0

@Ben对我来说,这看起来不像一千个分隔符。 – deceze 2011-05-30 11:18:33

0

因为“34,7140”是一个字符串,因为它包含一个逗号字符。

您可以使用$float = floatval(str_replace(',', '', $value[$id]));删除逗号字符或$float = floatval(str_replace(',', '.', $value[$id]));以用小数点替换逗号,从而迫使PHP将该数字解释为34.7140。

1

在PHP(和大多数其他计算机语言)小数点分隔符是点,而不是逗号:

更新:floatval()就停止解析字符串,因为它找到一个非数字字符。这是从手册中的例子:

<?php 
$var = '122.34343The'; 
$float_value_of_var = floatval($var); 
echo $float_value_of_var; // 122.34343 
?> 

如果你需要提取一些,这不是在英文格式,你必须编写自己的代码。这里有一个建议:

function to_decimal($string, $decimal_separator=',', $thousand_separator='.'){ 
    $value = strtr($string, array(
     $decimal_separator => '.', 
     $thousand_separator => '', 
    )); 
    if(!is_numeric($value)){ 
     return NAN; 
    } 
    return floatval($value); 
}