内置显示重要数字的方法

时间:2013-10-21 06:22:12

标签: java rounding significant-digits

有很多关于四舍五入的重要数字的问题,答案提供了一种新的舍入方法,例如:

Rounding to an arbitrary number of significant digits

Round a double to 2 decimal places

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

我希望有一个简单的内置方法(或来自Apache或Spring的标准知识库)给出数字和有效数字,打印出限制为指定有效数字的数字。

即:

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

2 个答案:

答案 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;
}