有很多关于四舍五入的重要数字的问题,答案提供了一种新的舍入方法,例如:
Rounding to an arbitrary number of significant digits
Round a double to 2 decimal places
这些问题和解决方案大多在2009〜2010年左右。
我希望有一个简单的内置方法(或来自Apache或Spring的标准知识库)给出数字和有效数字,打印出限制为指定有效数字的数字。
即:
答案 0 :(得分:2)
我发现使用String格式这样做的好方法。 显然,用户可以使用字符串格式“g”或“G”指定最大有效位数。 (http://developer.android.com/reference/java/util/Formatter.html)
如果您只是想将其打印出来。
public String toSignificantFiguresString(BigDecimal bd, int significantFigures){
return String.format("%."+significantFigures+"G", bd);
}
如果你想转换它:
public BigDecimal toSignificantFigures(BigDecimal bd, int significantFigures){
String s = String.format("%."+significantFigures+"G", bd);
BigDecimal result = new BigDecimal(s);
return result;
}
这是一个实际的例子:
BigDecimal bd = toSignificantFigures(BigDecimal.valueOf(12345678.123456789), 10);
System.out.println("bd: " + String.format("%f",bd));
注意:我正在使用BigDecimal进行计算,因为double和float存在精度问题。)
答案 1 :(得分:0)
不太对劲。为了完美:
public String toSignificantFiguresString(BigDecimal bd, int significantFigures ){
String test = String.format("%."+significantFigures+"G", bd);
if (test.contains("E+")){
test = String.format(Locale.US, "%.0f", Double.valueOf(String.format("%."+significantFigures+"G", bd)));
}
return test;
}