下面我们来看看BigDecimal的setScale方法

BigDecimal.setScale()方法用于格式化小数点

表示保留一位小数,默认用四舍五入方式
setScale(1)

直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_DOWN)

进位处理,2.35变成2.4 
setScale(1,BigDecimal.ROUND_UP)

四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)

四舍五入,2.35变成2.3,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_HALF_DOWN)

注意点一

scale指的是你小数点后的位数。scale()就是BigDecimal类中的方法。如
BigDecimal b = new BigDecimal("123.456"); 
b.scale(),返回的就是3

注意点二

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种,如
BigDecimal.ROUND_HALF_UP表示的就是4舍5入

注意点三

pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的

注意点四

对于一般add、subtract、multiply方法的小数位格式化如下
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

金额的数据类型是BigDecimal
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)

应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....

解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)

from: http://www.cnblogs.com/kevin-yuan/archive/2012/11/02/2751669.html

BigDecimal使用时的参数详解相关推荐

  1. Nginx内置变量以及日志格式变量参数详解

    Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...

  2. Android 系统Dimension和间距参数详解

    Android作为一个开放性的手持装置作业系统,势必面对终端显示器有多种不同规格的情况,这对程式开发者会有一定程度的困扰.  意图成为"云端的微软"的Google自然不会傻到任由开 ...

  3. k2698场效应管参数电流_mos管特性曲线-电流方程与参数详解

    mos管特性曲线-电流方程与参数详解 mos管 本文主要讲N沟道增强型mos管特性曲线.电流方程及参数MOS管是金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管. 一般是金属(metal)-氧化物 ...

  4. java微信支付必要参数_微信支付 开发账号体系各参数详解

    商户在微信公众平台提交申请资料以及银行账户资料,资料审核通过并签约后,可以获得表6-4所示帐户(包含财付通的相关支付资金账户),用于公众帐号支付. 帐号及作用: appid :公众帐号身份的唯一标识. ...

  5. [转帖]Ipvsadm参数详解(常用命令)

    Ipvsadm参数详解(常用命令) 2013年11月29日 12:41:40 怀素1980 阅读数:15901 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  6. nmos导通流向_技术参数详解,MOS管知识最全收录!

    原标题:技术参数详解,MOS管知识最全收录! MOS管,即金属(Metal)-氧化物(Oxide)-半导体(Semiconductor)场效应晶体管,是一种应用场效应原理工作的半导体器件:和普通双极型 ...

  7. 布局中文件中【控件间距参数详解以及单位选择】

    注意:例如:android:layout_gravity和android:gravity的区别: android:layout_gravity:此控件相对父控件的相对位置 android:gravit ...

  8. 窗口发送消息参数详解

    窗口发送消息参数详解 //    窗口.发送消息    函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果 中文函数原型: 发送消息(hwnd,msg ...

  9. MultiByteToWideChar和WideCharToMultiByte参数详解及使用方法

    转自:https://www.cnblogs.com/ziwuge/archive/2011/11/05/2236968.html https://www.cnblogs.com/gakusei/ar ...

最新文章

  1. 国内第一本律师撰写的海关法律专业书籍-《企业如何应对海关行政处罚》-第五章...
  2. 小程序input框letter-spacing失效,处理方法
  3. mysql不复制数据_windows mysql不停止服务复制数据
  4. 操作系统中的一些基本概念
  5. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(10) - MXCSR状态控制指令
  6. php 修改 apk名称6,反编译sencha toucha打包的apk文件,修改应用名称支持中文以及去除应用标题栏...
  7. 7.1 XHTML的规范化
  8. TCP三次握手及原理
  9. 【渝粤教育】国家开放大学2018年秋季 0709-21T初级会计实务(一) 参考试题
  10. python中的pickle解析
  11. 利用WhiteHose一步步建立分布式系统的框架(七)--添加组件的操作并实现分布式系统...
  12. Facebook算法swift实现
  13. Deep Learning Notes: Chapter 1 Introduction
  14. Tensorflow2.0学习(八) — tf.dataset自定义图像数据集
  15. matlab二维傅里叶变换ffshift,形象理解二维傅里叶变换
  16. 柏拉图《会饮篇》阅读笔记
  17. js数组方法的返回值总结
  18. 投影仪为何要测评?原因就是,不当大冤种
  19. 青年同辈应该有大器晚成的心理准备,共勉
  20. 奥托尼克斯接近开关型号_奥托尼克斯接近开关型号如何选

热门文章

  1. spring启动过程之源码跟踪(中)--spring Debug
  2. jms在jboss上的简单应用
  3. Logistic回归总结
  4. 布道微服务_01单体到服务化的演进
  5. Fragment初识
  6. qt编写activex_Qt中使用ActiveX(一)
  7. Java实现堆排序及详细图解
  8. @Autowired和@Resouce的区别
  9. 达梦数据库修改字段长度_DM7 达梦数据库 序列 和 自增列 说明
  10. python机器学习及实践_Python机器学习及实践