java.math.MathContext的使用
最近,我尝试了解
的用法,但未能正确理解。它用于四舍五入java.math.BigDecimal
。如果是,为什么不四舍五入十进制数字,甚至尾数部分。
从API文档中,我知道它遵循,ANSI X3.274-1996
和ANSI X3.274-1996/AM
1-2000规范中指定的标准,但是我没有让他们在线阅读。
如果您对此有任何想法,请告诉我。
回答:
@贾坦
谢谢您的回答。这说得通。您能否在BigDecimal#round方法的上下文中向我解释MathContext。
BigDecimal.round()
与 其他BigDecimal
方法 相比,
没有什么特别的。在所有情况下,均MathContext
指定有效位数和舍入技术。基本上,每个元素都有两个部分MathContext
。有精度,也有RoundingMode
。
精度再次指定有效位数。因此,如果您指定123
一个数字,并要求输入2个有效数字,您将得到120
。如果您以科学计数法来考虑,可能会更加清楚。
123
将以1.23e2
科学计数法表示。如果仅保留2个有效数字,则得到1.2e2
或120
。通过减少有效数字的位数,我们降低了指定数字的精度。
该RoundingMode
部分指定了如何处理精度损失。要重用该示例,如果您将其123
用作数字并要求输入2个有效数字,则降低了精度。带有RoundingMode
的HALF_UP
(默认模式),123
将变为120
。用RoundingMode
的CEILING
,你会得到130
。
例如:
System.out.println(new BigDecimal("123.4", new MathContext(4,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.CEILING)));
System.out.println(new BigDecimal("123.4",
new MathContext(1,RoundingMode.CEILING)));
输出:
123.41.2E+2
1.3E+2
2E+2
您可以看到精度和舍入模式都会影响输出。
以上是 java.math.MathContext的使用 的全部内容, 来源链接: utcz.com/qa/429629.html