PHP 的 floatval 不支持区域设置

ric*_*chb 2 php

我发现 PHP 的字符串到浮点转换不支持区域设置。如果我将 locale() 设置为小数点为逗号的区域设置,则 floatval 无法解析“3,14”。我发现这令人惊讶,尤其是因为相反的转换(浮点到字符串)是区域设置感知并输出逗号。

<?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
?>
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下:

decimal_point is `,'
float to string: 3,14
string to float: 3
Run Code Online (Sandbox Code Playgroud)

这是 Windows 上的 PHP 5.3.6。这是预期的行为吗?Unix 上的 PHP 会给出相同的结果吗?

Fen*_*ton 5

PHP 手册中有一个区域设置感知函数

<?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);
}
?>
Run Code Online (Sandbox Code Playgroud)

这比简单地用点替换逗号更安全,因为这会破坏某些语言环境。