当前位置:首页 > Java技术 > BigDecimal

BigDecimal

2022年08月04日 16:46:44Java技术6

Java 在 java.math 包中提供的 API 类 BigDecimal,用来对超过16位有效位的数进行精确的运算。

双精度浮点型变量 double 可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float 和 double 只能用来做科学计算或者是工程计算,在商业计算中要用 java.math.BigDecimal。BigDecimal 所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是 BigDecimal 的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。---百度百科

1、在数据库中的类型:Oracle > number

            MySQL > bigdecimal

2、初始化

BigDecimal bigDecimal1 = BigDecimal.valueOf(0.111);
BigDecimal bigDecimal2 = new BigDecimal("0.111");

这两种初始化方式其实是一样的,他们的值是相等的,不管是用 compareTo 还是 equals 对比。但是前提是 BigDecimal.valueOf(x)中的值范围必须在 double 支持的范围,源码:

1  public static BigDecimal valueOf(double val) {
2         // Reminder: a zero double returns '0.0', so we cannot fastpath
3         // to use the constant ZERO.  This might be important enough to
4         // justify a factory approach, a cache, or a few private
5         // constants, later.
6         return new BigDecimal(Double.toString(val));
7     }

valueOf 本质也是新建 BigDecimal 对象。注释意思是:双精度零会返回 '0.0',因此我们无法快速路径//使用常数 ZERO。 //对于以后证明工厂方法,缓存或一些私有常量而言,这可能足够重要。就是不能使用 BigDecimal.ZERO 常量作为参数。

错误示范:

BigDecimal bigDecimal3 = new BigDecimal(0.111);//warning
//0.11100000000000000144328993201270350255072116851806640625
BigDecimal bigDecimal4 = new BigDecimal(BigDecimal.ZERO); //error

new BigDecima(x) 不能用浮点数作为参数 ,否则会得到你意想不到的结果。若要用浮点数作为参数则使用 valueOf(x)。

使用常量初始化:

BigDecimal ZERO =  BigDecimal.ZERO;//0
BigDecimal ONE =  BigDecimal.ONE;//1
BigDecimal TEN =  BigDecimal.TEN;//10

 

作者:海绵baby
来源链接:https://www.cnblogs.com/hellohmbb/p/14199994.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17224.html

标签: BigDecimal
分享给朋友:

“BigDecimal” 的相关文章

java.math.BigDecimal常用方法

+构造函数 BigDecimal(BigInteger val) 将BigInteger转化为BigDecimal。 BigDecimal(BigInteger unscaledVal, int scale) 将B...

[转]BigDecimal使用(整理)

原文地址:https://www.jianshu.com/p/2947868d76eb 应用场景 大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:货币 使用 1、构建BigDecima...

BigDecimal转为int类型

BigDecimal转为int类型

直接调用BigDecimal的intValue()方法 示例: BigDecimal a = new BigDecimal(“1.1”); int b = a.intValue(); BigDecimal运算方法:...

JDK中BigDecimal的代码实现

package java.math; import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.PrintStream;...

Java BigDecimal

1构造函数(主要测试参数类型为double和String的两个常用构造函数)        BigDecimal aDouble =new BigDecimal(1.22);  &nb...

BigDecimal 使用compareTo比较大小

1.BigDecimal的比较模式  BigDecimal b1 = new BigDecimal(0.1); BigDecimal b2 = new BigDecimal(0.2); int c = b1.compareTo(b2); // -1 c=1表示...

【java提高】(19)---BigDecimal详解和精度问题

【java提高】(19)---BigDecimal详解和精度问题

BigDecimal详解和精度问题 一、背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格、质量。 为什么这么说,主要有两点...

BigDecimal去除小数位

String cellValue = ""; double numericCellValue = cell.getNumericCellValue(); BigDecimal bd2...

java定义Bigdecimal类型

Java常用类型定义、转换及比较主要有以下三个方面: (一)Integer类型 1).定义 Integer a=new Integer(int value); Integer a=new Integer(String value); 2).转换 i.定义中就可以将int...

BigDecimal常被忽略的问题

BigDecimal常被忽略的问题

  一:相除精度丢失的问题   BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题:   问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333......除不尽,这里不能让电脑一直除不尽,所以BigD...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。