bigdecimal用法总结(JAVA)

云似轻风 发表于:2018-09-05 21:17 阅读: 274次

我们在通过JAVA程序编写小数运算程序时,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal类,用来进行小数的精确计算。

BigDecimal类构造方法

public BigDecimal(String val):

建议使用参数为字符串的构造方法,如果参数为double或float,还是会出现不可预知的精度问题。

BigDecimal类成员方法

一共有五个成员方法,分别是加,减,乘,除,商五种计算方法。如下:

public BigDecimal add(BigDecimal augend)://加

public BigDecimal subtract(BigDecimal subtrahend)://减

public BigDecimal multiply(BigDecimal multiplicand)://乘

public BigDecimal divide(BigDecimal divisor)://除

public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)://商,几位小数,舍取模式

有的人可能会说了,我们用float类型和double类型不是也可以进行小数计算吗?

下面我来举例说明区别:

System.out.println(1.01 + 2.02);

大家看上面的程序会打印出什么结果?3.03?实际上输出的是3.0300000000000002。这是因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。有没有不失精度的办法呢?这里就要用到BigDecimal了。

java.math.BigDecimal类的说明

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

BigDecimal对象创建主要有两种方式:

BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625
BigDecimal two1 = new BigDecimal("1.34");//1.34

除了这两种外,特殊的像0、1、10可以这样写:

BigDecimal zero =BigDecimal.ZERO;
BigDecimal one =BigDecimal.ONE;
BigDecimal ten =BigDecimal.TEN;

使用注意事项

1.BigDecimal的运算都没有对原值进行操作,而是返回一个新的BigDecimal对象,这点可能有些小伙伴会搞错要注意一下。

2.BigDecimal的比较用的是BigDecimal的compareTo方法,将此 BigDecimal 与指定的 BigDecimal 比较。

代码列子:

BigDecimal one = BigDecimal.valueOf(1);
BigDecimal two = BigDecimal.valueOf(2);
BigDecimal three = one.add(two);
int i1 = one.compareTo(two);//-1
int i2 = two.compareTo(two);//0
int i3 = three.compareTo(two);//1

根据此方法,值相等但具有不同标度的两个BigDecimal对象(如,2.0 和 2.00)被认为是相等的。
当此 BigDecimal 在数字上小于、等于或大于被比较对象时,返回 -1、0 或 1。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持酷码派。多多关注下方我们的百度熊掌号哦!

酷码派 [KuMaPai.COM] - 陕ICP备案证 18010024号-2