@贾坦
谢谢您的回答。这说得通。您能否在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+21.3E+22E+2
您可以看到精度和舍入模式都会影响输出。



