Java BigDecimal 一些注意点
来源:互联网 发布:淘宝网地板棉拖鞋 编辑:程序博客网 时间:2024/06/05 08:55
为什么要有BigDecimal ,他是干什么的
float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候就要使用BigDecimal啦。
什么是BigDecimal
BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。
用法
可以处理任意长度的浮点数运算。
BigDecimal add(BigDecimal val) //BigDecimal 加法
BigDecimal subtract (BigDecimal val) //BigDecimal 减法
BigDecimal multiply (BigDecimal val) //BigDecimal 乘法
BigDecimal divide (BigDecimal val,RoundingMode mode) 除法
注意 *使用时要查看一下源码,有好多实现细节需要注意(有坑啊)
参数类型为double的构造方法的结果有一定的不可预知性
尽量使用参数类型为String的构造函数。
BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。
过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常, 需要设置精确度;就是给divide设置精确的小数点 。
参数类型为double的构造方法的结果有一定的不可预知性,因为不能double表示为任何有限长度的二进制小数,遇到这种情况先使用Double.toString(double)方法,然后使用BigDecimal(String)构造方法,将double转换为String。要获取该结果,请使用valueOf(double)方法。
使用compareTo方法来进行比较。返回的结果是int类型,-1表示小于,0是等于,1是大于。因为BigDecimal比较时,不仅比较值,而且还比较精度
- Java BigDecimal 一些注意点
- Java:使用BigDecimal除法时需要注意的点
- BigDecimal用法和注意点
- 【java】BigDecimal使用注意
- 关于java编程的一些注意点
- java方法的一些设计注意点
- 编写Java代码一些注意点
- JAVA的一些基本注意点
- [Java]值得注意的一些语法点
- Java String.split()的一些注意点
- java split方法中的一些注意点
- JAVA多线程的一些注意点
- java高并发开发一些注意点
- Java一些注意的细节点通用
- C++一些注意点
- c++ 一些注意点
- Impala一些注意点
- 一些注意点
- opencv 帧差法找出相差大的图像(包含访问mat的像素值)
- linux 批量杀掉程序 ps命令 grep命令 kill命令
- 印度国有企业抵制压力帮助银行坏账
- 如何从数据库中选出最热的十个检索词
- oracle 12c on oracle Linux-rac安装配置手册
- Java BigDecimal 一些注意点
- 拓扑排序
- ACM篇:POJ 1786--Bridge Hands
- activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含
- go 打印当前时间
- shareSDK
- 2.非模态对话框的创建
- API 25 (Android 7.1.1 API) view.TextureView
- ionic 套接字只允许一次