2011-09-04 38 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); 
} 
?> 

这比简单地用点代替逗号,因为这将打破东西对于某些区域设置安全区域设置感知功能。