0

PHP では、小数点が画面に出力されるとき (または文字列にキャストされるとき)、小数点記号もコンマに変換されることがわかりました。しかし、それはなぜですか?これに関するドキュメントは見つかりませんでした。また、文字列へのキャストで国際化設定が考慮されているとは思いません。

コード例:

$var = 12.345;

var_dump($var); // Outputs: double(12.345)
var_dump((string)$var); // Outputs: string(6) "12,345"
var_dump(str_replace(',', '.', $var)); // Outputs: string(6) "12.345"
echo $var; // Outputs: 12,345

この動作の原因は何ですか?


この質問は PHP < 8 に適用されます。ドキュメントによると

PHP 8.0.0 以降、小数点文字は常に.です。PHP 8.0.0 より前では、小数点文字はスクリプトのロケール (カテゴリ LC_NUMERIC) で定義されていました。setlocale() 関数を参照してください。

4

1 に答える 1

5

マニュアルを読んだり、グーグルで調べたりすると、これが見つかります

小数点文字は、スクリプトのロケール (カテゴリ LC_NUMERIC) で定義されます。

ここで、 sys に設定されている小数点を知りたい場合:

print_r(localeconv());

どちらが返されます:

Array
(
    [decimal_point] => .
    [...many other confs...]
)

設定したい場合は、適切な言語を使用してください:setlocale(LC_NUMERIC, $language)

以前fr_FRはコンマとen_USドットを取得していました。

マニュアルを参照しsetlocale()ください。

ちなみに、 LC_NUMERIC confs 全体を変更せずdecimal_pointに返される配列のキーを直接設定する方法がわかりません。localeconv()誰かが知っている場合は、編集してください:)

于 2015-05-05T12:22:51.850 に答える