Java 如何将两位数舍入为有效位数
我有一个应用程序,它读取SAS xpt文件并将列值存储到ByteBuffer中,然后使用它的getValue方法来获取双对象。现在我必须在小数点后打印双精度的12位有效数字。我从中找到了一个很好的答案,但很少有案例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位有
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不,他有双精度。他尝试使用大小数作为解决方案的一部分。这个解决方案运行良好。他使用大小数来进行格式化。