2011-09-04 40 views
2

我發現PHP的字符串浮點轉換不是區域識別。如果我將setlocale()設置爲小數點爲逗號的語言環境,則floatval無法解析「3,14」。特別是因爲相反的轉換 - 浮動到字符串 - 感知區域並輸出逗號,我發現這很令人驚訝。PHP的floatval不是區域識別

<?php 
setlocale(LC_ALL, "Norwegian", "no"); 
$localeconv = localeconv(); 
echo "decimal_point is `" . $localeconv['decimal_point'] . "'<br/>"; 
print "float to string: " . 3.14 . "<br/>"; // <-- Outputs "3,14" CORRECT 
print "string to float: " . floatval("3,14"); // <-- Outputs "3" INCORRECT 
?> 

輸出我得到的是以下幾點:

decimal_point is `,' 
float to string: 3,14 
string to float: 3 

這是PHP 5.3.6在Windows上。這是預期的行爲嗎? Unix上的PHP是否給出了相同的結果?

+0

是的。是。在這裏閱讀評論:http://php.net/manual/en/function.floatval.php – NullUserException

+0

究竟哪個意見? – richb

+0

然後使用'floatval(str_replace(',','。',$ val));' –

回答

4

有一個在The PHP Manual

<?php 
function ParseFloat($floatString){ 
    $LocaleInfo = localeconv(); 
    $floatString = str_replace($LocaleInfo["mon_thousands_sep"] , "", $floatString); 
    $floatString = str_replace($LocaleInfo["mon_decimal_point"] , ".", $floatString); 
    return floatval($floatString); 
} 
?> 

這比簡單地用點代替逗號,因爲這將打破東西對於某些區域設置安全區域設置感知功能。