Java中BigDecimal精度丢失
来源:互联网 发布:java web进销存源码 编辑:程序博客网 时间:2024/04/28 02:17
1.前言
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。
双精度浮点型变量double可以处理16位有效数。
float和double主要用来处理科学计算和工程计算,
在实际应用中,特别是商业计算往往要求结果更加精确。运用BigDecimal可以很方便的解决这个问题。
2.构造方法
BigDecimal a = new BigDecimal();
BigDecimal一共有4个构造方法
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
特别注意:
double a = 0.1;
所创建的new BigDecimal(a);并不正好等一0.1,而是 0.1000000000000000055511151231257827021181583404541015625
这是因为doule不能表示为任何有限长度的二进制小数。
String b = "0.1";
所创建的new BigDecimal(b),正好等于0.1.
3.运算方式
因为BigDecimal是一个对象,不同于double,float等基本类型可以通过运算符+,—,*,/等做运算,
其有自己的运算方法:
BigDecimal add(BigDecimal augend) 加法运算
BigDecimal subtract(BigDecimal subtrahend) 减法运算
BigDecimal multiply(BigDecimal multiplicand) 乘法运算
BigDecimal divide(BigDecimal divisor) 除法运算
举例:
BigDeciaml a = new BigDeciaml("1");
BigDeciaml b = new BigDeciaml("2");
a.add(b);
system.out.println("a="+a);
大家很容易认为会输出a=3,其实是a=1;
其实BigDecimal的加减乘除方法都是返回一个新的BigDeciaml对象,
所以:
BigDecimal c = a.add(b);
system.out.println("c="+c);//c=3
- Java中BigDecimal精度丢失
- BigDecimal解决商业运算中丢失精度的问题
- java中处理数据精度丢失
- Java中double类型精度丢失问题
- Java中关于精度丢失的问题
- Java中运算精度的问题(double与BigDecimal)
- JAVA中double转化为BigDecimal精度缺失测试
- java精度丢失问题
- 【java基础】BigDecimal 精度控制
- BigDecimal类——解决double精度丢失
- 浮点数精度丢失的解决方法(用BigDecimal处理)
- 使用BigDecimal解决double加减乘除丢失精度问题
- Java中float,double为什么会丢失精度。
- JAVA程序中Float和Double精度丢失问题
- JAVA程序中Float和Double精度丢失问题
- java中Double类型的运算精度丢失的问题
- java中double、float类型计算精度丢失问题
- java中double和float精度丢失问题及解决方法
- 安装Java JDK
- iOS开发UI篇
- 【数据结构作业】队列
- alpha beta 剪枝算法
- 解决使用vue.js与ckeditor.js时,ckeditor不显示问题
- Java中BigDecimal精度丢失
- TCP 的可靠传输
- 记录类型(复合数据类型)
- 【OpenCV】vector<Mat> 视频截取为图片的实例
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- GitHub push失败
- 使用OptionMenu在屏幕中自定义自己的菜单
- Java网络编程
- 胡兆进个人简历