用于显示重要数字的内置方法
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;
【讨论】:
是否有测试用例证明需要额外的行? 有过,由于出现了指数数字,但它一直存在。以上是关于用于显示重要数字的内置方法的主要内容,如果未能解决你的问题,请参考以下文章