我可以在 DecimalFormat 中禁用舍入“功能”吗?
例如:
DecimalFormat f = new DecimalFormat();
f.parseObject("123456789012345.99");
结果是 1.2345678901234598E14
java版本“1.6.0_21”
我可以在 DecimalFormat 中禁用舍入“功能”吗?
例如:
DecimalFormat f = new DecimalFormat();
f.parseObject("123456789012345.99");
结果是 1.2345678901234598E14
java版本“1.6.0_21”
这与 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
据我了解,您想以特殊格式打印数字。您需要调用 applyPattern(String Pattern) ,如下所示:
f.applyPattern(".000");
System.out.println(f.format(123456789.99)); // prints 123456789.990
注意模式是本地化的,例如在德国它将打印 ,而不是 。分离分数。您可以通过设置舍入首选项
f.setRoundingMode()
猜猜我是从哪里学到这一切的?当然来自Java 文档。阅读有关模式表达式的更多信息,以按照您喜欢的方式进行格式化
不,这不是四舍五入,这只是浮点数的工作方式。
做你想做的唯一方法是使用 BigDecimal。
我建议您阅读“每个计算机科学家都应该了解的关于浮点运算的知识”。