我是靠谱客的博主 完美鸡翅,最近开发中收集的这篇文章主要介绍BigDecimal精度控制1. BigDecimal中的精度控制规则2.使用BigDecimal除法运算精度控制3.使用BigDecimal静态方法做精度控制,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1. BigDecimal中的精度控制规则
ROUND_UP //不管保留数字后面是大是小(0除外)都会进1
ROUND_DOWN //保留设置数字,后面所有直接去除
ROUND_HALF_UP //常用的四舍五入
ROUND_HALF_DOWN //五舍六入
ROUND_CEILING //向正无穷方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
2.使用BigDecimal除法运算精度控制
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 第一参数表示除数,第二个参数表示小数点后保留位数,第三个参数表示取舍规则
@Test
public void test2() {
//使用divide做除法精度控制
BigDecimal a = new BigDecimal("1.333333");
BigDecimal b = new BigDecimal("1.444444");
BigDecimal c = new BigDecimal("1.5555555");
BigDecimal d = new BigDecimal("1.6666666");
BigDecimal e = new BigDecimal("1");
//ROUND_UP //不管保留数字后面是大是小(0除外)都会进1
double di1 = a.divide(e, 3, BigDecimal.ROUND_UP).doubleValue();// 1.334
//ROUND_DOWN //保留设置数字,后面所有直接去除
double di2 = a.divide(e, 3, BigDecimal.ROUND_DOWN).doubleValue();// 1.333
//ROUND_HALF_UP //常用的四舍五入
double di3 = b.divide(e, 3, BigDecimal.ROUND_HALF_UP).doubleValue();// 1.444
double di9 = c.divide(e, 3, BigDecimal.ROUND_HALF_UP).doubleValue();// 1.556
//ROUND_HALF_DOWN //四舍五入
double di4 = c.divide(e, 3, BigDecimal.ROUND_HALF_DOWN).doubleValue();// 1.556
double di10 = d.divide(e, 3, BigDecimal.ROUND_HALF_DOWN).doubleValue();// 1.667
//ROUND_CEILING //向正无穷方向舍入
double di5 = a.divide(e, 3, BigDecimal.ROUND_CEILING).doubleValue();// 1.334
//ROUND_FLOOR //向负无穷方向舍入
double di6 = a.divide(e, 3, BigDecimal.ROUND_FLOOR).doubleValue();// 1.333
//ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
double di7 = a.divide(e, 3, BigDecimal.ROUND_HALF_EVEN).doubleValue();// 1.333
System.out.println("di1 = " + di1);
System.out.println("di2 = " + di2);
System.out.println("di3 = " + di3);
System.out.println("di9 = " + di9);
System.out.println("di4 = " + di4);
System.out.println("di10 = " + di10);
System.out.println("di5 = " + di5);
System.out.println("di6 = " + di6);
System.out.println("di7 = " + di7);
}
3.使用BigDecimal静态方法做精度控制
@Test
public void test3() {
//使用divide做除法精度控制
BigDecimal a = new BigDecimal("1.333333");
BigDecimal b = new BigDecimal("1.444444");
BigDecimal c = new BigDecimal("1.5555555");
BigDecimal d = new BigDecimal("1.6666666");
//ROUND_UP //不管保留数字后面是大是小(0除外)都会进1
double di1 = a.setScale(3, BigDecimal.ROUND_UP).doubleValue();//1.334
//ROUND_DOWN //保留设置数字,后面所有直接去除
double di2 = a.setScale(3, BigDecimal.ROUND_DOWN).doubleValue();//1.333
//ROUND_HALF_UP //常用的四舍五入
double di3 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();//1.444
double di9 = c.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();//1.556
//ROUND_HALF_DOWN //四舍五入
double di4 = c.setScale(3, BigDecimal.ROUND_HALF_DOWN).doubleValue();//1.556
double di10 = d.setScale(3, BigDecimal.ROUND_HALF_DOWN).doubleValue();//1.667
double di11 = b.setScale(3, BigDecimal.ROUND_HALF_DOWN).doubleValue();//1.444
//ROUND_CEILING //向正无穷方向舍入
double di5 = a.setScale(3, BigDecimal.ROUND_CEILING).doubleValue();//1.334
//ROUND_FLOOR //向负无穷方向舍入
double di6 = a.setScale(3, BigDecimal.ROUND_FLOOR).doubleValue();//1.333
//ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
double di7 = a.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();//1.333
System.out.println("di1 = " + di1);
System.out.println("di2 = " + di2);
System.out.println("di3 = " + di3);
System.out.println("di9 = " + di9);
System.out.println("di4 = " + di4);
System.out.println("di10 = " + di10);
System.out.println("di11 = " + di11);
System.out.println("di5 = " + di5);
System.out.println("di6 = " + di6);
System.out.println("di7 = " + di7);
}
最后
以上就是完美鸡翅为你收集整理的BigDecimal精度控制1. BigDecimal中的精度控制规则2.使用BigDecimal除法运算精度控制3.使用BigDecimal静态方法做精度控制的全部内容,希望文章能够帮你解决BigDecimal精度控制1. BigDecimal中的精度控制规则2.使用BigDecimal除法运算精度控制3.使用BigDecimal静态方法做精度控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复