我正在使用java大小数,如下所示:
class test bigDecimal{
private BigDecimal decimalResult;
public boolean iterate(String value) {
if (value == null) {
return true;
}
System.out.println("value is: " + value);
BigDecimal temp = new BigDecimal(value);
System.out.println("temp val is: " + temp);
if (decimalResult == null) {
decimalResult = temp;
} else {
decimalResult = decimalResult.add(temp);
}
return true;
}
}
我用来创建大十进制的所有字符串的比例为6.例如:123456.678000,456789.567890
但是如果我给出一个大的字符串列表作为输入并检查总和,我得到小数点后8位数的输出。例如。类似于:2939166.38847228。
我想知道为什么BigDecimal会改变这种规模?我的所有输入都是6分。
任何意见都表示赞赏。 -Thanks
答案 0 :(得分:6)
请阅读BigDecimal的javadoc: http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html 在内部,所有BigDecimal都转换为某种内部格式。
如果您想获得特定格式,则必须将其称为合适格式。
您可以使用scaleByPowerOfTen(int n)
,例如n = 6
哦,顺便说一句,永远不要使用new BigDecimal
,而是使用BigDecimal.valueOf
。
编辑:
NumberFormat numberFormat = NumberFormat.getInstance(); // use a locale here
String formated = df.format(myUnformatedBigDecimal);
答案 1 :(得分:0)
这不是内部代表的问题。这样BigDecimal.toString()就可以了。它调用layoutChars(true) - 格式化数字的私有方法。它的硬编码等级为6.但我认为无所谓。你真的不需要品脱所有数字。 BigDecimal提供计算高精度数字的能力。这就是它的作用。
答案 2 :(得分:0)
大十进制给出的是精确的输出,但是该输出比6位更准确,因此获得6位输出的最佳方法是通过将BigDecimal转换为字符串并执行以下操作来删除最后2个小数: >
String myOutput = new
BigDecimal("1000.12345678").toString();
myOutput = myOutput.substring(myOutput.length-2,
myOutput.length);