我最近出于以下好奇:
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 时不可能获得良好的 float ? 为什么在 s 和 s2 情况下它仍然是 double ?
PS:在我看来,这个问题与数字格式无关。我真的很想了解为什么 (float)d 转换不起作用!!
最佳答案
你的表达式 precision.equals("float") ? (float)d: d
无效,因为条件运算符只有一个结果类型,如果一个参数的类型为 float
并且other 的类型为 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寻找对格式化输出提供更多控制的替代方案。
关于java - 连接字符串时从 Double 转换为 Float 时的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682814/