Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用格式化的printf就可以在java中精确地强制转换吗?_Java_Casting - Fatal编程技术网

不使用格式化的printf就可以在java中精确地强制转换吗?

不使用格式化的printf就可以在java中精确地强制转换吗?,java,casting,Java,Casting,此行产生双值3。3333 5 System.out.println(“名称+”的平均分数=“+(双)和/3”) 可以设置精度的宽度吗?打印的结果(与printf的结果相同,只需额外的一步),或者使用a(如果您想要具有任意精度的类型)。您可以使用DecimalFormat或BigDecimal,如下所示: import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; publ

此行产生双值
3。3333 5

System.out.println(“名称+”的平均分数=“+(双)和/3”)


可以设置精度的宽度吗?

打印的结果(与
printf
的结果相同,只需额外的一步),或者使用a(如果您想要具有任意精度的类型)。

您可以使用
DecimalFormat
BigDecimal
,如下所示:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class Main {
    public static void main(String[] args) {
        int sum = 10;
        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        System.out.println(Double.valueOf(decimalFormat.format((double) sum / 3)));

        // Another way
        System.out.println(new BigDecimal(String.valueOf((double) sum / 3)).setScale(2, RoundingMode.HALF_UP));

        // The better way using BigDecimal - thanks to @Andreas
        System.out.println(BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(3), 2, RoundingMode.HALF_UP));
    }
}
输出:

3.33
3.33
3.33

一种解决方案是编写函数:

static double roundWithTwoDigits(double x) {
    return (double) Math.round(x * 100) / 100;
}
现在您可以使用它:

System.out.println("Average marks of " + name + " = " + roundWithTwoDigits((double) sum / 7));

这回答了你的问题吗?这不是演员阵容。这是打印号,精度是用双精度固定的。这就是为什么如果您想要一个不同的表示形式,就需要格式化它。@Amongalen这在printf方法中是可能的,但我想知道printfit是否可以。这就是允许格式化输出的原因之一。
printf
允许格式化输出。使用
BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(3),2,RoundingMode.HALF_UP)代替在执行
double
时可能出现的精度损失。
。您现在可以超过
双精度
,例如25位小数,结果是
3.3333333333
,而通过
双精度
将导致
3.3333333335000000000
。我认为它对非常大的数字不起作用,是吗?是的,对于非常大的数字,应该使用大小数。更重要的是要回答如何在没有格式的情况下获得两位数的精确数字。这是可能的,但它肯定是有限的,应该使用格式化来格式化,或者使用BigDecimal来控制精度。