有很多关于有效数字舍入的问题,以及提供了一种新的舍入方法的答案,例如:
这些问题和解决方案大多是在 2009~2010 年左右。
我想要一个简单的内置方法(或来自标准众所周知的库,例如来自 Apache 或 Spring),它给定数字和有效数字,打印出限制为指定有效数字的数字。
IE:
- 123.456789 // 到 2 个重要数字:120
- 123.456789 // 到 4 个重要数字:123.4
- 123.456789 // 到 7 个重要数字:123.4567
有很多关于有效数字舍入的问题,以及提供了一种新的舍入方法的答案,例如:
这些问题和解决方案大多是在 2009~2010 年左右。
我想要一个简单的内置方法(或来自标准众所周知的库,例如来自 Apache 或 Spring),它给定数字和有效数字,打印出限制为指定有效数字的数字。
IE:
我发现这种使用字符串格式的好方法。显然,用户可以使用字符串格式“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 存在精度问题。)
不太对。为了让它完美:
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;
}