/** * 说明: * @author me@longlonggo.com * */ public class MyTest { public static void main(String[] args) { BigDecimal testNum1 = new BigDecimal("12.3405"); BigDecimal testNum2 = new BigDecimal("-12.3405"); BigDecimal testNum5 = new BigDecimal("1.2555"); BigDecimal testNum6 = new BigDecimal("-1.2555"); // 舍入模式ROUND_UP,保留两位小数(此舍入模式始终不会减少计算值的大小) // 不管正负,保留位数字+1(0除外) System.out.println("----ROUND_UP:【" + testNum1 + " → " + testNum1.setScale(2,BigDecimal.ROUND_UP)+"】"); System.out.println("----ROUND_UP:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_UP)+"】n"); // 舍入模式ROUND_DOWN,保留两位小数(此舍入模式始终不会增加计算值的大小) // 不管正负,保留位后全部舍去 System.out.println("----ROUND_DOWN:【" + testNum1 + " → " + testNum1.setScale(2,BigDecimal.ROUND_DOWN)+"】"); System.out.println("----ROUND_DOWN:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_DOWN)+"】n"); // 舍入模式ROUND_CEILING,保留两位小数(此舍入模式始终不会减少计算值。) // 正数时,保留数位后如果有值,则保留位+1 // 负数时,保留位后全部舍去,保留位值不变 System.out.println("----ROUND_CEILING:【" + testNum1 + " → " + testNum1.setScale(2,BigDecimal.ROUND_CEILING)+"】"); System.out.println("----ROUND_CEILING:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_CEILING)+"】n"); // 舍入模式ROUND_FLOOR,保留两位小数(此舍入模式始终不会增加计算值) // 正数时,保留位后全部舍去 // 负数时,保留位数字+1(0除外,符号为负) System.out.println("----ROUND_FLOOR:【" + testNum1 + " → " + testNum1.setScale(2,BigDecimal.ROUND_FLOOR)+"】"); System.out.println("----ROUND_FLOOR:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_FLOOR)+"】n"); // 舍入模式ROUND_HALF_UP,保留两位小数(传统型四舍五入) // 不管正负,如果舍弃位数字>=5,则保留数位最后一位数字+1,否则保留位后全部舍去 System.out.println("----ROUND_HALF_UP:【" + testNum1 + " → " + testNum1.setScale(2,BigDecimal.ROUND_HALF_UP)+"】"); System.out.println("----ROUND_HALF_UP:【" + testNum5 + " → " + testNum5.setScale(2,BigDecimal.ROUND_HALF_UP)+"】"); System.out.println("----ROUND_HALF_UP:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_HALF_UP)+"】"); System.out.println("----ROUND_HALF_UP:【" + testNum6 + " → " + testNum6.setScale(2,BigDecimal.ROUND_HALF_UP)+"】n"); // 舍入模式ROUND_HALF_DOWN,保留两位小数(五舍六入) // 该舍入方式本人有疑问,待修正 System.out.println("----ROUND_HALF_DOWN:【" + testNum1 + " → " + testNum1.setScale(2,BigDecimal.ROUND_HALF_DOWN)+"】"); System.out.println("----ROUND_HALF_DOWN:【" + testNum5 + " → " + testNum5.setScale(2,BigDecimal.ROUND_HALF_DOWN)+"】"); System.out.println("----ROUND_HALF_DOWN:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_HALF_DOWN)+"】"); System.out.println("----ROUND_HALF_DOWN:【" + testNum6 + " → " + testNum6.setScale(2,BigDecimal.ROUND_HALF_DOWN)+"】n"); // 舍入模式ROUND_HALF_EVEN,保留两位小数(银行家舍入法) // 该舍入方式本人有疑问,待修正 System.out.println("----ROUND_HALF_EVEN:【" + testNum2 + " → " + testNum2.setScale(2,BigDecimal.ROUND_HALF_EVEN)+"】"); System.out.println("----ROUND_HALF_EVEN:【" + testNum6 + " → " + testNum6.setScale(2,BigDecimal.ROUND_HALF_EVEN)+"】n"); // 舍入模式ROUND_UNNECESSARY,精确的结果,因此不需要舍入,舍入报错(精确的结果) // 该舍入方式本人有疑问,待修正 System.out.println("----ROUND_UNNECESSARY:【" + testNum1 + " → " + testNum1.setScale(BigDecimal.ROUND_UNNECESSARY)+"】"); System.out.println("----ROUND_UNNECESSARY:【" + testNum2 + " → " + testNum2.setScale(BigDecimal.ROUND_UNNECESSARY)+"】n"); } }
取值结果 ----ROUND_UP:【12.3405 → 12.35】 ----ROUND_UP:【-12.3405 → -12.35】 ----ROUND_DOWN:【12.3405 → 12.34】 ----ROUND_DOWN:【-12.3405 → -12.34】 ----ROUND_CEILING:【12.3405 → 12.35】 ----ROUND_CEILING:【-12.3405 → -12.34】 ----ROUND_FLOOR:【12.3405 → 12.34】 ----ROUND_FLOOR:【-12.3405 → -12.35】 ----ROUND_HALF_UP:【12.3405 → 12.34】 ----ROUND_HALF_UP:【1.2555 → 1.26】 ----ROUND_HALF_UP:【-12.3405 → -12.34】 ----ROUND_HALF_UP:【-1.2555 → -1.26】 ----ROUND_HALF_DOWN:【12.3405 → 12.34】 ----ROUND_HALF_DOWN:【1.2555 → 1.26】 ----ROUND_HALF_DOWN:【-12.3405 → -12.34】 ----ROUND_HALF_DOWN:【-1.2555 → -1.26】 ----ROUND_HALF_EVEN:【-12.3405 → -12.34】 ----ROUND_HALF_EVEN:【-1.2555 → -1.26】 ----ROUND_UNNECESSARY:【12.3405 → 12.3405000】 ----ROUND_UNNECESSARY:【-12.3405 → -12.3405000】