常见写法

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. 关于log4net使用中遇到的错误
  2. Python之数据聚合与分组运算
  3. 区块链世界中的IOTA:它是什么样的存在?
  4. 【官方文档】《暗黑世界V1.4》API说明!
  5. JAGUARSDN1网络的开机自动启动 禁用,WIFI模块的启动关闭控制
  6. linux打开光盘文件怎么打开方式,ISO是什么文件?用什么打开?
  7. 认清面向服务架构SOA的真实面目
  8. [Flash开发笔记] List控件--删除指定label或data的项
  9. Apache HttpClient 客户端使用详解
  10. 如何用HTML语言设计进度条,html进度条代码_html5如何实现简单进度条效果
  11. 【Auto.JS】入门宝典—Auto.JS开发使用笔记(随笔和使用心得)
  12. 矩阵相乘c语言代码用指针实现,矩阵相乘C语言实现
  13. 【题解】LuoGu1512:伊甸园日历游戏
  14. ssh-hostbased配置方法
  15. 可区分英文字母:lL、iI、0Oo的系统字体
  16. JSCRIPT如何调试
  17. html5分镜头脚本范例,(最新整理)分镜头脚本范本
  18. 每日新闻:国美与车势达成独家战略合作;腾讯Tsrc年度峰会破界召开;日本将允许高度自动驾驶车上路;“开源芯片”是芯片发展的新潮流...
  19. 电商项目:高仿小米商城(一)
  20. 学生网页作业—山河旅行社网站(5页) HTML+CSS+JavaScript 学生DW网页 出行 旅途 游玩

热门文章

  1. 机器学习之——“损失函数”与“成本函数”的辨析
  2. 43条你必须知道的健康常识能做到几条?
  3. TZOJ 1004:渊子赛马
  4. IDEA中改动后台代码,不需手动重启。
  5. python中模块文件的扩展名一定是py_Python 模块(Module)
  6. 使用cmd修改windows电脑品牌的方法
  7. 利用Theano理解深度学习——Convolutional Neural Networks
  8. 安装mac os 未能与服务器取得联系,Apple服务器问题导致应用程序安装与macOS更新失败等问题...
  9. 【EI/SCOPUS征稿】第八届信息科学计算机技术与交通运输国际学术会议(ISCTT 2023)
  10. 基于simulink的通信系统设计学习总结