用于显示重要数字的内置方法

Posted

技术标签:

【中文标题】用于显示重要数字的内置方法【英文标题】:Built in methods for displaying Significant figures 【发布时间】:2013-10-21 06:22:12 【问题描述】:

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

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

【问题讨论】:

有一个Unicode Library mentioned in response to a similar question 可以做你想做的事。 见这里***.com/questions/7572309/… @Carlos:谢谢,我看到了,但不想使用来自 com.ibm.icu.text 的库。 @Stanislav:+1。如果他们没有一点处理来计算比例,那将是答案。 对,这就是为什么你可以滥用科学记数法。 123456.1234 到 3 sig figs 是 1.23e5,这是相同的答案。 :) 【参考方案1】:

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

【讨论】:

g 说明符将切换为科学记数法。【参考方案2】:

不太对。为了让它完美:

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;

【讨论】:

是否有测试用例证明需要额外的行? 有过,由于出现了指数数字,但它一直存在。

以上是关于用于显示重要数字的内置方法的主要内容,如果未能解决你的问题,请参考以下文章

基本数据类型及内置方法

数字类型的内置方法

8.02 PY基础之数字类型的内置方法

关于不同内置数组方法 Javascript 的术语

数据类型内置方法

数字类型内置方法