java.math.MathContext的使用

最近,我尝试了解

的用法,但未能正确理解。它用于四舍五入java.math.BigDecimal。如果是,为什么不四舍五入十进制数字,甚至尾数部分。

从API文档中,我知道它遵循,ANSI X3.274-1996ANSI X3.274-1996/AM

1-2000规范中指定的标准,但是我没有让他们在线阅读。

如果您对此有任何想法,请告诉我。

回答:

@贾坦

谢谢您的回答。这说得通。您能否在BigDecimal#round方法的上下文中向我解释MathContext。

BigDecimal.round() 其他BigDecimal方法 相比,

没有什么特别的。在所有情况下,均MathContext指定有效位数和舍入技术。基本上,每个元素都有两个部分MathContext。有精度,也有RoundingMode

精度再次指定有效位数。因此,如果您指定123一个数字,并要求输入2个有效数字,您将得到120。如果您以科学计数法来考虑,可能会更加清楚。

123将以1.23e2科学计数法表示。如果仅保留2个有效数字,则得到1.2e2120。通过减少有效数字的位数,我们降低了指定数字的精度。

RoundingMode部分指定了如何处理精度损失。要重用该示例,如果您将其123用作数字并要求输入2个有效数字,则降低了精度。带有RoundingModeHALF_UP(默认模式),123将变为120。用RoundingModeCEILING,你会得到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.4

1.2E+2

1.3E+2

2E+2

您可以看到精度和舍入模式都会影响输出。

以上是 java.math.MathContext的使用 的全部内容, 来源链接: utcz.com/qa/429629.html

回到顶部