2

doctrine のバグを mysql と組み合わせて見つけるのに時間を無駄にしまし2.52.0。私は、ドイツ語のローカルを使用すると、教義が次のようなSQLクエリを作成する原因となるaの代わりにde_DE10進数の区切り文字が使用されることがわかりました,.

insert into table (doubleColumn) values('2,5') -- will result in a 2.0

これを引き起こしているこの問題は、php のその行を使用して再現可能です。

$a=2.5;
printf("%s",$a); // prints out 2.5
echo $a; // prints out 2.5
setlocale(LC_ALL,"de_DE");
printf("%s",$a); // prints out 2,5
echo $a; // prints out 2,5
echo "my number " . $a; // also results in a 2,5

私の質問は、php が現在のロケールを使用して型doubleを文字列に変換するのはなぜですか。Javaのように、これは当てはまりません

Double a = 2.5;
System.out.println(a.toString()); // prints out 2.5
Locale.setDefault(Locale.GERMAN);
System.out.println(a.toString()); // still prints out 2.5

PHP が現在設定されているロケールを文字列変換に使用している理由はありますか?

4

1 に答える 1

2

使用することを意味していると思いますprintf("%f", $a);(ここではコードが正常に機能するため)。答えはドキュメントにあります:

http://fr2.php.net/manual/en/function.sprintf.php

f - 引数は float として扱われ、浮動小数点数 (ロケール対応) として表示されます。

F - 引数は float として扱われ、浮動小数点数として表示されます (非ロケール対応)。PHP 4.3.10 および PHP 5.0.3 以降で利用可能です。

だからあなたは使うべきです%F

于 2013-05-26T20:45:08.430 に答える