Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Java 如何将两位数舍入为有效位数_Java_Rounding - Fatal编程技术网

Java 如何将两位数舍入为有效位数

Java 如何将两位数舍入为有效位数,java,rounding,Java,Rounding,我有一个应用程序,它读取SAS xpt文件并将列值存储到ByteBuffer中,然后使用它的getValue方法来获取双对象。现在我必须在小数点后打印双精度的12位有效数字。我从中找到了一个很好的答案,但很少有案例 BigDecimal bd = new BigDecimal(dblColumnData.doubleValue()); System.out.println(String.format("%."+15+"G", bd)); 这里给出15是因为整数部分有3位,小数点后必须有12位有

我有一个应用程序,它读取SAS xpt文件并将列值存储到ByteBuffer中,然后使用它的getValue方法来获取双对象。现在我必须在小数点后打印双精度的12位有效数字。我从中找到了一个很好的答案,但很少有案例

BigDecimal bd = new BigDecimal(dblColumnData.doubleValue());
System.out.println(String.format("%."+15+"G", bd));
这里给出15是因为整数部分有3位,小数点后必须有12位有效数字

它不起作用的情况是因为BigDecimal是由Double创建的。如果我打印Double,那么它在小数点后包含超过12位数字,并且使用上述方法正确地进行四舍五入


因此,我认为,如果我能获得类似的双精度格式方法,它将解决我的问题。

我会这样做:

static double roundTo(double d, int digit) {
    double exp = Math.pow(10, digit);
    d *= exp;
    d = Math.round(d);
    return d / exp;
}
下面将数字四舍五入到逗号后的3位,然后打印出来

public static void main(String[] args) {
    System.out.println(roundTo(7.34343434, 3));
}

是否打印7.343

您真的是指有效数字吗?即123456.123456包含12位有效数字,但只有6位小数。我猜您的意思是需要12位小数?看起来@EJP确信它是小数:-dblColumnData还有什么其他方法?似乎您应该以其他方式正确地将其转换为BigDecimal,而不必经过double。@Duncan是的,我的意思是小数点后12位。若我只通过12,那个么格式化方法就是在小数点后返回9位,所以我通过15并返回正确的值。你们不能将双精度舍入到精确的小数位数,他并没有双精度,他有大小数。@EJP不,他有双精度。他尝试使用大小数作为解决方案的一部分。这个解决方案运行良好。他使用大小数来进行格式化。