Java的。如何在DecimalFormat中禁用舍入

时间:2011-02-07 10:12:03

标签: java rounding decimalformat

我可以在DecimalFormat中禁用舍入“功能”吗?

例如:

DecimalFormat f = new DecimalFormat();

f.parseObject("123456789012345.99");

结果是1.2345678901234598E14

java版“1.6.0_21”

3 个答案:

答案 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。阅读有关模式表达式的更多信息以格式化您喜欢的方式