2011-05-30 39 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); 
}