博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中大小数BigDecimal的加减乘除用法及场景的详细介绍,看完不信你还会报Syntax error on token “+/-/*“, invalid AssignmentOperat异常
阅读量:2495 次
发布时间:2019-05-11

本文共 1240 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

卖个小问题

八大基本数据类型:char byte double int long short boolean float

数值类型有:
4个整数型 byte int long short
2个浮点型 float double
剩余1个字符型 char
1个布尔型 boolean
其中数值类型面临着很大的问题:
我想要小数点后10位参与运算,假设科学家在计算的过程只能精确到小数点后2位,那可是要出大问题的
int取值范围是[-2147483648, 2147483647],也就十个亿的长度,姓马名云和姓马名化腾每天面临的资产数字恐怕是很多个int类型,像这样的情况Java的基本数据类型就无法解决问题了
但是! 金融行业很多软件都是用Java语言所建立的,面临这一问题如何计算呢
同时平时在使用double类型的时候很容易出现的如下的情况
在这里插入图片描述

所以说,double只能供于一些对数值比较不敏感的行业或者场景使用

为此Java提供了BigDecimal对象来解决这一问题,这个对象也叫做大小数

既然是对象类型了,两个数值之间的加减乘除就不仅仅是通过+ - * /来解决了,肯定是通过方法来实现了

BigDecimal的加减乘除用法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

除法时存在的精度/进位问题

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

BigDecimal divisor : 这个不必多问,就是你的除数

int scale : 这个是获取的数字想保留几位小数
int roundingMode : 这个是获取的数字保留小数后,对后一位小数选取的模式(四舍五入/进位/舍去),但是这个值最大只能是7
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第三个参数可选的选项 :

BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2

在这里插入图片描述
BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3
在这里插入图片描述

BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4

在这里插入图片描述

BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3

后边两种的区别就是如果保留的位数的后一位如果正好是5的时候,一个舍弃掉,一个进位。
在这里插入图片描述

BigDecimal 的比较大小用法

在这里插入图片描述

输出结果如下:
在这里插入图片描述
BigDecimal注意事项
1.BigDecial对象本身的值是不可改变的,就像String一样,它的所有操作都会生成一个新的对象,所以说他的方法返回的是一个新的BigDecial对象而不是在它对象本身的值的基础上修改
这里看看源码
在这里插入图片描述
底层其实调用的就是一个静态的add方法,具体如下
在这里插入图片描述

  1. 不要用equals方法来比较BigDecimal对象,只能通过compareTo()和signum()方法
    在这里插入图片描述
    通过源码介绍我们知道scale是值的小数点后的长度而不是值本身

在这里插入图片描述

在这里插入图片描述

转载地址:http://ayhrb.baihongyu.com/

你可能感兴趣的文章
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
对于模拟交易所引发的思考
查看>>
高频交易的几种策略
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>