Java – 常用API – BigDecimal 精度小数

简介

在我们日常使用中,所有的数值都是用二进制来进行保存的,而小数是一个比较麻烦的问题。在计算机的世界中,整数的表示,中以 2 的 根数次方决定的,且第一个根数从0开始,如下:

 

而小数的计算就相对比较复杂,小数部分使用 2 的 负根数次方决定的,且第一个根数从-1开始的,如下

 

在一些比较特殊的小数中,使用这种方式去表达会需要使用的字节数已超出了 double 可存储的容量,系统会自动省略超出部分,使得小数精度出现误差,这在我们一些日常软件开发中可能并不影响,但在一些金融方面的开发和高精度生产开发上,就影响非常大了,Java给我们提供了一种高精度小数计算的类 BigDecimal。

 

BigDecimal

主要构造方法

BigDecimal( double val )

Java 并不推荐使用 double 数值传入构造的方法,因为这个构造方法依然不精确。

 

BigDecimal( String val )

Java 推荐使用的方法,该方法传入表达小数的字符串,能精确存储。

 

BigDecimal.valueOf( double val )

平时我们使用中,也可以通过静态方法创建小数,传入 double 值可生成精确小数。

 

BigDecimal( String val ) 和 BigDecimal.valueOf( double val ) 的区别

1.BigDecimal.valueOf( double val ) 仅可传入 double 的值,如果小数值大于 double ,建议使用 BigDecimal( String val ) 创建。

2.BigDecimal.valueOf( double val ) 底层提供了预生成 0~10 的实例对象,在需要创建 0~10 的整数时,底层会复用预生成对象而不会创建新的对象。

 

 

BigDecimal 计算方法

BigDecimal add(BigDecimal val)   => 相加

BigDecimal subtract(BigDecimal val)   => 相减

BigDecimal multiply(BigDecimal val)   => 相乘

BigDecimal divide(BigDecimal val)   => 相除,除不尽会报异常

BigDecimal divide(BigDecimal val,保留尾位数,舍弃模式)   => 相除不尽时的处理

保留尾位数:scale 保留小数位后几位

舍弃模式:

RoundingMode.HALF_UP : 四舍五入,如果是0.5,会进一

RoundingMode.HALF_DOWN : 向最近数字方向舍入,如果是0.5,会舍掉

RoundingMode.CEILING : 向正方向舍入

RoundingMode.DOWN : 向 0 方舍入

RoundingMode.FLOOR : 向负无限大方向舍入

RoundingMode.UP : 远离 0 方向舍入

RoundingMode.HALF_EVEN : 向最接近数字方向舍入,如果相邻数字距离相等,则向相邻偶数舍入

RoundingMode.UNNECESSARY  : 用于断言请求的操作具有精确结果的舍入

详情可在 JDK 文档中看案例。

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Java – 常用API – BigDecimal 精度小数
简介 在我们日常使用中,所有的数值都是用二进制来进行保存的,而小数是一个比较麻烦的问题。在计算机的世界中,整数的表示,中以 2 的 根数次方决定的,且第一个根数从0开始,如下:  ……
<<上一篇
下一篇>>