当从串联到字符串连接时从双精度到浮点精度?
问题描述:
我最近碰到下面的好奇心:当从串联到字符串连接时从双精度到浮点精度?
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
为什么不能有一个很好的浮动计算时小号或S2? 为什么在s和s2的情况下仍然是双倍的?
PS:在我看来,这个问题与数字格式无关。我真的很想理解为什么(float)d演员不工作!
答
你的表达precision.equals("float") ? (float)d: d
没有任何效果,作为条件运算符具有一个单一的所得类型,这是double
如果一个参数具有类型float
,而另一个具有类型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提供更多控制格式化输出的替代方案。
“boolean?”的结果? float:double'是一个'double'这是铸造浮起来的,但是它正在被转换成一个double。 –