Java大十进制问题
我使用java大十进制,如下所示:Java大十进制问题,java,bigdecimal,Java,Bigdecimal,我使用java大十进制,如下所示: class test bigDecimal{ private BigDecimal decimalResult; public boolean iterate(String value) { if (value == null) { return true; } System.out.println("value is: " + value); BigDe
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、4567889.567890
但是,如果我给出一个大的字符串列表作为输入,并检查总和,我会得到小数点后8位的输出。例如:2939166.38847228
我想知道为什么BigDecimal会改变这个比例?我所有的输入都是6级的
欢迎您的任何意见。
-谢谢请阅读关于BigDecimal的javadoc: 在内部,所有的大小数都转换成某种内部格式 如果你想得到一个特定的格式,你必须称之为适当的。 例如,可以使用n=6的
scaleByPowerOfTen(int n)
哦,顺便说一下,不要使用新的BigDecimal,而是使用BigDecimal.valueOf
编辑:
NumberFormat NumberFormat=NumberFormat.getInstance();//在此处使用区域设置
String formatted=df.format(myUnformatedBigDecimal)代码>这不是内部表示的问题。这样BigDecimal.toString()就可以工作了。它调用layoutChars(true)——格式化数字的私有方法。它的硬编码刻度为6。但我认为这并不重要。你真的不必把所有的数字都品脱掉。BigDecimal提供了计算高精度数字的能力。它就是这样做的 Big decimal给出的是精确的输出,但该输出比6位更精确,因此获得6位输出的最佳方法是通过将Big decimal转换为字符串并执行类似操作来删除最后2位小数:
String myOutput = new
BigDecimal("1000.12345678").toString();
myOutput = myOutput.substring(myOutput.length-2,
myOutput.length);
你能发布一个说明这一点的帖子吗?lol@任何输入都是值得赞赏的
:)输入大约有100万个这样的stribg值,它们被汇总为大十进制并被打印为字符串。对不起,你完全正确。我想到了BigInteger的内部表示。您应该使用如下内容:NumberFormat NumberFormat=NumberFormat.getInstance();//在此处使用区域设置字符串formatted=df.format(myUnformatedBigDecimal);关于不使用new,我有一个字符串,我正在使用它从字符串创建大十进制。valueOf仅接受长/双精度输入。在我的例子中,输入可以是21个字符,比long/double包含的字符多。