我浪费了一些时间来寻找与 mysql 结合使用的学说中的错误,其中双2.5
精度不断存储为2.0
. 我发现使用德语本地de_DE
使用小数分隔符,
而不是.
导致学说创建 sql 查询,如
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使用当前设置的语言环境进行字符串转换有什么原因吗?