连接字符串时从 Double 转换为 Float 时的精度?
Precision when Casting from Double to Float while concatenating String?
我最近运行在以下好奇:
double d=0.8608278036117554;
String precision="float";
float f=(float)d;
String s="a " + (precision.equals("float") ? (float)d: d) + " Bonjour";
String s2="a " + String.valueOf(precision.equals("float") ? (float)d: d) + " Bonjour";
String s3="a " + (precision.equals("float") ? String.valueOf((float)d): String.valueOf(d)) + " Bonjour";
println(d);
println(f);
println(s);
println(s2);
println(s3);
//0.8608278036117554
//0.8608278
//a 0.8608278036117554 Bonjour
//a 0.8608278036117554 Bonjour
//a 0.8608278 Bonjour
为什么在计算 s 或 s2 时不可能有一个漂亮的浮点数?
为什么在 s 和 s2 的情况下它仍然是 double?
PS:我认为这个问题与数字格式无关。我真的很想知道为什么 (float)d 演员表不起作用!!
您的表达式 precision.equals("float") ? (float)d: d
无效,因为条件运算符只有一个结果类型,如果一个参数的类型为 float
而另一个参数的类型为 double
double
.
所以第一个备选方案将从 float
扩大到 double
,而从 double
到 float
再回到 double
的转换可能有对值的影响,在任何一种情况下都会调用 String.valueOf(double)
。
您可以改用 (precision.equals("float") ? String.valueOf((float)d): String.valueOf(d))
,其方法调用并不多余,因为它们调用了不同的方法,String.valueOf(float)
和 String.valueOf(double)
。
就是说,您不应该使用缩小到 float
来控制输出。
检查 Format Float to n decimal places 以寻找可以更好地控制格式化输出的替代方案。
我最近运行在以下好奇:
double d=0.8608278036117554;
String precision="float";
float f=(float)d;
String s="a " + (precision.equals("float") ? (float)d: d) + " Bonjour";
String s2="a " + String.valueOf(precision.equals("float") ? (float)d: d) + " Bonjour";
String s3="a " + (precision.equals("float") ? String.valueOf((float)d): String.valueOf(d)) + " Bonjour";
println(d);
println(f);
println(s);
println(s2);
println(s3);
//0.8608278036117554
//0.8608278
//a 0.8608278036117554 Bonjour
//a 0.8608278036117554 Bonjour
//a 0.8608278 Bonjour
为什么在计算 s 或 s2 时不可能有一个漂亮的浮点数? 为什么在 s 和 s2 的情况下它仍然是 double?
PS:我认为这个问题与数字格式无关。我真的很想知道为什么 (float)d 演员表不起作用!!
您的表达式 precision.equals("float") ? (float)d: d
无效,因为条件运算符只有一个结果类型,如果一个参数的类型为 float
而另一个参数的类型为 double
double
.
所以第一个备选方案将从 float
扩大到 double
,而从 double
到 float
再回到 double
的转换可能有对值的影响,在任何一种情况下都会调用 String.valueOf(double)
。
您可以改用 (precision.equals("float") ? String.valueOf((float)d): String.valueOf(d))
,其方法调用并不多余,因为它们调用了不同的方法,String.valueOf(float)
和 String.valueOf(double)
。
就是说,您不应该使用缩小到 float
来控制输出。
检查 Format Float to n decimal places 以寻找可以更好地控制格式化输出的替代方案。