我可以在DecimalFormat中禁用舍入“功能”吗?
例如:
DecimalFormat f = new DecimalFormat();
f.parseObject("123456789012345.99");
结果是1.2345678901234598E14
java版“1.6.0_21”
答案 0 :(得分:5)
这与Java的功能无关。这是由于IEEE 64位双浮点数的精度有限。事实上,所有数据类型都有其精度限制。 SOME比其他人大。
double d = 123456789012345.99;
System.out.println(d);
打印
1.2345678901234598E14
如果想要更高精度,请使用BigDecimal。
BigDecimal bd = new BigDecimal("123456789012345.99");
System.out.println(bd);
打印
123456789012345.99
即使BigDecimal也有限制,但它们远远超出你或任何其他人所需要的。 (约20亿位数)
编辑:最大的已知素数适合BigDecimal http://primes.utm.edu/largest.html
答案 1 :(得分:1)
不,这不是四舍五入,这就是浮点数的工作方式。
执行所需操作的唯一方法是使用BigDecimal。
我建议您阅读“每个计算机科学家应该知道的关于浮点算术的内容”。
答案 2 :(得分:1)
据我了解,您希望以特殊格式打印该号码。你需要打电话 applyPattern(String Pattern)如下:
f.applyPattern(".000");
System.out.println(f.format(123456789.99)); // prints 123456789.990
注意模式是本地化的,例如在德国,它将打印,而不是。分开分数。 您可以通过
设置舍入偏好f.setRoundingMode()
猜猜我在哪里学到了这一切?当然来自Java docs。阅读有关模式表达式的更多信息以格式化您喜欢的方式