常见写法

BigDecimal bigDecimal = new BigDecimal(1.2215667); // 这种写法会造成精度丢失的BigDecimal bigDecimal = new BigDecimal(10); // 这种写法是可以的BigDecimal bigDecimal = new BigDecimal("1.2215667"); // 这么写不会丢精度
int count = bigDecimal.scale(); // 7 返回小数点后保留了几位

详细用法

1. ROUND_UP

代码如下(示例):

BigDecimal bigDecimal = new BigDecimal("1.221").setScale(2, BigDecimal.ROUND_UP);
System.out.println(bigDecimal); // 1.23 不管舍弃位是几 直接进一位

2. ROUND_DOWN

代码如下(示例):

BigDecimal bigDecimal = new BigDecimal("1.2266").setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(bigDecimal); // 1.22 不管舍弃位是几 直接去掉多余的位数

3. ROUND_CEILING(分两种情况)

代码如下(示例):

// 值为正数
BigDecimal bigDecimal = new BigDecimal("1.2246").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(bigDecimal); // 1.23 不管舍弃位是几 都向上进一位// 值为负数
BigDecimal bigDecimal = new BigDecimal("-1.2256").setScale(2,BigDecimal.ROUND_CEILING);
System.out.println(bigDecimal); // -1.22 不管舍弃位是几 直接删掉

4. ROUND_FLOOR(分两种情况)

代码如下(示例):

// 值为正数的时候
BigDecimal bigDecimal = new BigDecimal("1.2266").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(bigDecimal); // 1.22 不管舍弃位是几 直接去掉多余的位数// 值为负数的时候
BigDecimal bigDecimal  = new BigDecimal("-1.2226").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(bigDecimal); // -1.23 不管舍弃位是几 负数时会进一位

5. ROUND_HALF_UP

代码如下(示例):

BigDecimal bigDecimal = new BigDecimal("1.225").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bigDecimal); // 1.23 四舍五入(若舍弃位的的第一个数 >=5 就进一位)

6. ROUND_HALF_DOWN

代码如下(示例):

BigDecimal bigDecimal = new BigDecimal("1.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(bigDecimal); // 1.22 四舍五入(若舍弃位的的第一个数 >5 就进一位)

7. ROUND_HALF_EVEN

代码如下(示例):

/*** 这边特殊一点,是根据保留的最后一位小数的奇偶性来判断的* 这边保留的最后一位是2 偶数  只有当 >5 时 才能进一位*/
BigDecimal bigDecimal = new BigDecimal("1.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(bigDecimal); // 1.22/*** 这边保留的最后一位是1 奇数 当>=5时 才能进一位*/
BigDecimal bigDecimal1 = new BigDecimal("1.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(bigDecimal1); // 1.22

7. ROUND_UNNECESSARY

翻译:舍入模式可以断言所请求的操作具有准确的结果,因此不需要舍入。如果在产生不精确结果的操作上指定了这种舍入模式,则会引发ArithmeticException

代码如下(示例):

BigDecimal bigDecimal = new BigDecimal("1.2266").setScale(2,BigDecimal.ROUND_UNNECESSARY);
System.out.println(bigDecimal); // 会抛出ArithmeticException异常

BigDecimal.setScale()方法总结相关推荐

  1. BigDecimal.setScale方法

    BigDecimal.setScale()方法用于格式化小数点 BigDecimal.setScale(1)表示保留一位小数,默认用四舍五入方式  BigDecimal.setScale(1,BigD ...

  2. 【java笔记】java中用于小数进位的BigDecimal.setScale方法

    BigDecimal.setScale主要用于对BigDecimal数据小数点后的位数进行进位.舍位.截断等操作.其进位方式主要有以下8种,依次分别对应着数字0~7,即写它们和写它们对应的数字是等价的 ...

  3. BigDecimal.setScale()方法实用技巧

    方法使用 scale() 方法用于格式化小数点 setScale(1,BigDecimal.ROUND_DOWN) 直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecim ...

  4. BigDecimal中divide方法与setScale方法详解

    BigDecimal中divide方法详解 1.首先说一下用法,BigDecimal中的divide主要就是用来做除法的运算.其中有这么一个方法. public BigDecimal divide(B ...

  5. BigDecimal.setScale 处理java小数点

    BigDecimal.setScale()方法用于格式化小数点 setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多 ...

  6. BigDecimal.setScale

    BigDecimal.setScale()方法用于格式化小数点 setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多 ...

  7. BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary

    BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary 在运行如下代码时, package BigDeci ...

  8. setscale方法的用法_基于BigDecimal.setScale的用法小结

    1. BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal( ...

  9. BigDecimal类 setScale()方法java.lang.ArithmeticException: Rounding necessary

    BigDecimal调用setScale方法时,当未设置舍入模式时,系统会给个默认ROUND_UNNECESSARY(int 值为7)值,如果小数点后不为零,而且要保留的小数位数小于旧小数位数,那么此 ...

最新文章

  1. R语言ggplot2可视化:拟合二次曲线(quadratic curve)并使用ggplot2进行可视化、可视化两个响应变量和一个预测变量的二次曲线
  2. 7 = 350 000 000 ?!
  3. 算法学习——递推之猴子爬山
  4. textview 滚动显示.txt
  5. tinyxml使用指导
  6. 单片机断电后不保存程序_为什么单片机语音芯片既有flash又有EEPROM
  7. js对当前时间的相关操作
  8. multinorm r语言_与心理学数据分析相关的R工具包
  9. CSS中em和px单位的区别(转)
  10. python获取当前日期_Python程序获取当前日期
  11. Taro+react开发(8)--控制跳转
  12. hbase 用户名密码_HBase开源 | HBase表管理系统HBaseManager2.0.2
  13. 育碧2k微软服务器,育碧服务器出现大规模的BUG:影响到多个平台
  14. RAC-DG 安装总结
  15. 奇怪的315:大家都知道,为什么要等晚会曝光,管理部门呢
  16. [转载] 全本张广泰——第九回 出世见师兄 广泰走江湖
  17. 安装sql2005,没有SQL Server management studio的原因分析及解决方案
  18. Layui Select四级联动效果触发
  19. 解决java中使用getImage()导入图片失败问题
  20. ios可视化编程 UI高级 UI_13

热门文章

  1. php textrank,textrank-jieba 算法复现
  2. BIN/CUE ISO
  3. 网站被攻击了要怎么处理
  4. 41岁阿里工程师:35岁转管理,真的是必经之路吗?
  5. 12.整数转罗马数字
  6. html怎么使两个div模块并列居中,css怎样让两个div重叠,怎么让整个div居中
  7. 京东新通路2020年将新增1万家“六统一”门店
  8. winserver定时任务保证python持续运行
  9. Linux下I2C驱动框架全面解析
  10. 住在我隔壁的一对大学生夫妻(九)