4

有很多关于有效数字舍入的问题,以及提供了一种新的舍入方法的答案,例如:

四舍五入到任意数量的有效数字

将 double 舍入到小数点后 2 位

这些问题和解决方案大多是在 2009~2010 年左右。

我想要一个简单的内置方法(或来自标准众所周知的库,例如来自 Apache 或 Spring),它给定数字和有效数字,打印出限制为指定有效数字的数字。

IE:

  • 123.456789 // 到 2 个重要数字:120
  • 123.456789 // 到 4 个重要数字:123.4
  • 123.456789 // 到 7 个重要数字:123.4567
4

2 回答 2

2

我发现这种使用字符串格式的好方法。显然,用户可以使用字符串格式“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 存在精度问题。)

于 2013-10-21T23:47:10.097 回答
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;
}
于 2016-02-04T22:16:47.957 回答