一、金额工具
1.金额加、减、乘、除
加 注意:累加之后返回的是一个新的对象,跟方法外部定义的BigDecimal对象不是同一个。重新赋值,覆盖掉就好了。
@Test
public void test1 ( ) {
BigDecimal value = new BigDecimal ( 3 ) ;
for ( int i = 0 ; i < 10 ; i++ ) {
value = value. add ( new BigDecimal ( 1 ) ) ;
}
System . out. println ( value) ;
}
@Test
public void test2 ( ) {
BigDecimal num1 = new BigDecimal ( 3 ) ;
BigDecimal num2 = new BigDecimal ( 5 ) ;
BigDecimal subtract = num2. subtract ( num1) ;
System . out. println ( subtract) ;
}
@Test
public void test3 ( ) {
BigDecimal num1 = new BigDecimal ( 3 ) ;
BigDecimal num2 = new BigDecimal ( 5 ) ;
BigDecimal multiply = num1. multiply ( num2) ;
System . out. println ( multiply) ;
}
@Test
public void test4 ( ) {
BigDecimal a = new BigDecimal ( 5 ) ;
BigDecimal b = new BigDecimal ( 8 ) ;
BigDecimal bigDecimal = a. divide ( b) . setScale ( 2 , RoundingMode . HALF_UP) ;
System . out. println ( bigDecimal) ;
}
2.BigDecimal 的 RoundingMode 各取值介绍
RoundingMode.DOWN 等价枚举: BigDecimal.ROUND_DOWN 舍位原则: 粗暴截断舍弃位,不考虑任何进位舍位操作
@Test
public void test5 ( ) {
BigDecimal a1 = new BigDecimal ( "3.33333333333333" ) . setScale ( 2 , RoundingMode . DOWN) ;
System . out. println ( a1) ;
BigDecimal a2 = new BigDecimal ( "1.976744186046512" ) . setScale ( 2 , RoundingMode . DOWN) ;
System . out. println ( a2) ;
BigDecimal a3 = new BigDecimal ( "-4.868913857677903" ) . setScale ( 2 , RoundingMode . DOWN) ;
System . out. println ( a3) ;
BigDecimal a4 = new BigDecimal ( "-2.307692307692308" ) . setScale ( 2 , RoundingMode . DOWN) ;
System . out. println ( a4) ;
}
RoundingMode.UP 等价枚举: BigDecimal.ROUND_UP 舍位原则: 精度保留的最后一位,朝远离数轴的方向进位。正数+1,负数-1
@Test
public void test6 ( ) {
BigDecimal a1 = new BigDecimal ( "3.33333333333333" ) . setScale ( 2 , RoundingMode . UP) ;
System . out. println ( a1) ;
BigDecimal a2 = new BigDecimal ( "1.976744186046512" ) . setScale ( 2 , RoundingMode . UP) ;
System . out. println ( a2) ;
BigDecimal a3 = new BigDecimal ( "-4.868913857677903" ) . setScale ( 2 , RoundingMode . UP) ;
System . out. println ( a3) ;
BigDecimal a4 = new BigDecimal ( "-2.307692307692308" ) . setScale ( 2 , RoundingMode . UP) ;
System . out. println ( a4) ;
}
RoundingMode.CEILING 等价枚举: BigDecimal.ROUND_CEILING 舍位原则: 精度保留的最后一位,朝数轴正方向 round。正数时等价于 UP,负数时等价于 DOWN
@Test
public void test7 ( ) {
BigDecimal a1 = new BigDecimal ( "3.33333333333333" ) . setScale ( 2 , RoundingMode . CEILING) ;
System . out. println ( a1) ;
BigDecimal a2 = new BigDecimal ( "1.976744186046512" ) . setScale ( 2 , RoundingMode . CEILING) ;
System . out. println ( a2) ;
BigDecimal a3 = new BigDecimal ( "-4.868913857677903" ) . setScale ( 2 , RoundingMode . CEILING) ;
System . out. println ( a3) ;
BigDecimal a4 = new BigDecimal ( "-2.307692307692308" ) . setScale ( 2 , RoundingMode . CEILING) ;
System . out. println ( a4) ;
}
RoundingMode.FLOOR 等价枚举: BigDecimal.ROUND_FLOOR 舍位原则: 与 CEILING 相反,在精度最后一位,朝数轴负方向 round。正数时等价于 DOWN,负数时等价于 UP
@Test
public void test8 ( ) {
BigDecimal a1 = new BigDecimal ( "3.33333333333333" ) . setScale ( 2 , RoundingMode . FLOOR) ;
System . out. println ( a1) ;
BigDecimal a2 = new BigDecimal ( "1.976744186046512" ) . setScale ( 2 , RoundingMode . FLOOR) ;
System . out. println ( a2) ;
BigDecimal a3 = new BigDecimal ( "-4.868913857677903" ) . setScale ( 2 , RoundingMode . FLOOR) ;
System . out. println ( a3) ;
BigDecimal a4 =