当前位置: 首页 >> Java >> BigDecimal的八种舍入模式 >> 正文

BigDecimal的八种舍入模式

1年前 (2018-01-23)     作者:4869     分类:Java     阅读次数:964     评论(0)    文章页统计代码
/**
 * 说明:
 * @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】


除非注明,发表在“石马人山的博客”的文章『BigDecimal的八种舍入模式』版权归4869所有。 转载请注明出处为“本文转载于『石马人山的博客』原地址http://longlonggo.com/post/387.html
文章页分享代码

评论

发表评论   

昵称*

E-mail*(建议输入,以便收到博主回复的提示邮件)

网站