BigDecimal 常量

450 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

不可变类,可以是任意有符号的十进制数。可以表示一个任意大小且精度完全准确的浮点数。

常量(JDk1.8 API中文文档):

ZERO:值为0,标度为0。

ONE:值1,标度为0。

TEN:值为10,标度为0。

ROUND_UP:舍入模式从零开始。始终在非零丢弃分数之前增加数字。请注意,该舍入模式不会降低计算值的大小。

ROUND_DOWN:舍入模式向零舍入。不要在丢弃的分数之前递增数字(即截断)。请注意,该舍入模式不会增加计算值的大小。

ROUND_CEILING:圆形模式向正无穷大转弯。如果BigDecimal为正,则表现为ROUND_UP ;如果为负,则表现为ROUND_DOWN 。请注意,舍入模式不会降低计算值。

ROUND_FLOOR:舍入模式向负无穷大转弯。如果BigDecimal为正,则表现为ROUND_DOWN ;如果为负,表现为ROUND_UP 。请注意,舍入模式不会增加计算值。

ROUND_HALF_UP:四舍五入模式向“最近邻居”转弯,除非两个邻居都是等距的,在这种情况下是圆括弧的。对于ROUND_UP如果丢弃的分数为0.5,则表现为;否则,表现为ROUND_DOWN 。请注意,这是我们大多数人在小学教学的舍入模式。

ROUND_HALF_DOWN:四舍五入模式向“最近邻居”转弯,除非这两个邻居都是等距离的,在这种情况下,这是倒圆的。对于ROUND_UP如果丢弃的分数> 0.5,则表示行为;否则,表现为ROUND_DOWN

ROUND_HALF_EVEN:四舍五入模式向“最近邻居”转弯,除非两个邻居都是等距离的,在这种情况下,向着邻居方向转移。对于ROUND_HALF_UP行为,如果丢弃的分数的左边的数字是奇数的;像ROUND_HALF_DOWN一样,如果它是均匀的。请注意,这是在一系列计算中重复应用时最小化累积误差的舍入模式。

ROUND_UNNECESSARY:舍入模式来确定所请求的操作具有精确的结果,因此不需要舍入。如果在产生不精确结果的操作上指定了舍入模式,则抛出ArithmeticException

class DemoApplicationTests {
    @Test
    void contextLoads() {
        BigDecimal number=new BigDecimal(4.35);
        System.out.println("ZERO:"+number.ZERO);//默认值为0
        System.out.println("ONE:"+number.ONE);//默认值为1
        System.out.println("TEN:"+number.TEN);//默认值为10
        //该规则下均进一位计算值
        System.out.println("ROUND_UP:"+new BigDecimal("6.60").setScale(1,BigDecimal.ROUND_UP));
        //该规则下保留位之后的数据全部舍弃
        System.out.println("ROUND_DOWN:"+new BigDecimal("6.69").setScale(1,BigDecimal.ROUND_DOWN));
        //若数值为正,则与ROUND_UP规则相同,若数据为负,则与ROUND_DOWN规则相同
        System.out.println("ROUND_CEILING:"+new BigDecimal("-6.69").setScale(1,BigDecimal.ROUND_CEILING));
        //若数值为负,则与ROUND_UP规则相同,若数值为正,则与ROUND_DOWN规则相同
        System.out.println("ROUND_FLOOR:"+new BigDecimal("6.69").setScale(1,BigDecimal.ROUND_FLOOR));
        //四舍五入, 数值>=.5则进一位
        System.out.println("ROUND_HALF_UP:"+new BigDecimal("6.65").setScale(1,BigDecimal.ROUND_HALF_UP));
        //四舍五入,数值>.5则进一位
        System.out.println("ROUND_HALF_DOWN:"+new BigDecimal("6.65").setScale(1,BigDecimal.ROUND_HALF_DOWN));
        //若舍弃部分左边的数值为偶数,则做ROUND_HALF_DOWN处理,若为奇数,则做ROUND_HALF_UP处理
        System.out.println("ROUND_HALF_EVEN:"+new BigDecimal("6.635").setScale(2,BigDecimal.ROUND_HALF_EVEN));
        //所请求的操作具有精确的结果,因此不需要舍入。如果在产生不精确结果的操作上指定了舍入模式,则抛出`ArithmeticException`
        System.out.println("ROUND_UNNECESSARY:"+new BigDecimal("5").setScale(1,BigDecimal.ROUND_UNNECESSARY));
    }
}
ZERO:0
ONE:1
TEN:10
ROUND_UP:6.6
ROUND_DOWN:6.6
ROUND_CEILING:-6.6
ROUND_FLOOR:6.6
ROUND_HALF_UP:6.7
ROUND_HALF_DOWN:6.6
ROUND_HALF_EVEN:6.64
ROUND_UNNECESSARY:5.0

\