3

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

例如:

DecimalFormat f = new DecimalFormat();

f.parseObject("123456789012345.99");

结果是 1.2345678901234598E14

java版本“1.6.0_21”

4

3 回答 3

5

这与 Java 的特性无关。这是由于 IEEE 64 位双浮点数的精度有限。事实上,所有数据类型的精度都有限制。有些比其他的大。

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

于 2011-02-07T10:25:09.003 回答
1

据我了解,您想以特殊格式打印数字。您需要调用 applyPattern(String Pattern) ,如下所示:

  f.applyPattern(".000");
  System.out.println(f.format(123456789.99)); // prints 123456789.990

注意模式是本地化的,例如在德国它将打印 ,而不是 。分离分数。您可以通过设置舍入首选项

f.setRoundingMode()

猜猜我是从哪里学到这一切的?当然来自Java 文档。阅读有关模式表达式的更多信息,以按照您喜欢的方式进行格式化

于 2011-02-07T10:57:35.497 回答
1

不,这不是四舍五入,这只是浮点数的工作方式。

做你想做的唯一方法是使用 BigDecimal。

我建议您阅读“每个计算机科学家都应该了解的关于浮点运算的知识”。

于 2011-02-07T10:14:47.390 回答