java - 连接字符串时从 Double 转换为 Float 时的精度?

标签 java casting double precision

我最近出于以下好奇:

    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

为什么在计算 ss2 时不可能获得良好的 float ? 为什么在 ss2 情况下它仍然是 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/

相关文章:

java - 这条线是什么意思?

tsql - T-SQL 将整数格式化为 2 位字符串

c - 如何将 uint16_t 数组类型转换为 uint8_t 数组?

c - 在 C 中将大数分配给 double

c++ - 在Visual Studio中将64位 double 转换为字节数组形式的80位 double

java - sakai cle 中的 iframe 攻击(xss)

java - 在 JavaFx 和 Webstart (JNLP) 中提供触摸控制

java - Selenium FirefoxDriver 如何使用 Crontab 执行自动化测试

c++ - 将无符号字符转换为红黑树的有符号字符

c# Double.MinValue 和 Double.MaxValue 之间的随机数