zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java中BigDecimal类的简单用法

JAVA 简单 用法 bigdecimal
2023-06-13 09:15:46 时间

本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下:

一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,这里挑选最常用的两个来演示一下:一个就是BigDecimal(doubleval),另一个就是BigDecimal(Stringstr)。这两个看上去没什么太大区别,但是正像API描述中说的那样:

/*Theresultsofthisconstructorcanbesomewhatunpredictable.Onemightassumethat
newBigDecimal(.1)isexactlyequalto.1,butitisactuallyequal
to.1000000000000000055511151231257827021181583404541015625.Thisissobecause.1
cannotberepresentedexactlyasadouble(or,forthatmatter,asabinaryfraction
ofanyfinitelength).Thus,thelongvaluethatisbeingpassedintotheconstructor
isnotexactlyequalto.1,appearancesnonwithstanding.
The(String)constructor,ontheotherhand,isperfectlypredictable:newBigDecimal
(".1")isexactlyequalto.1,asonewouldexpect.Therefore,itisgenerally
recommendedthatthe(String)constructorbeusedinpreferencetothisone.*/

也就是说利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。请看下面的代码:

importjava.math.*;
publicclassTestBigDecimal{
publicstaticvoidmain(Stringargs[]){
BigDecimalbd=newBigDecimal("10.123");
BigDecimalbd1=newBigDecimal(10.123);
System.out.println(bd+"/n"+bd1);
}
}

运行后输出:

10.123
10.1229999999999993320898283855058252811431884765625

所以我们在选择构造函数时,要看具体需求而定。

另外,很多人会问到怎么将基本类型,如int,float,double,long,和BigDecimal对象相互转换。很简单:

基本类型通过构造函数转换成对应的BigDecimal对象,而BigDecimal类提供了诸如intValue(),floatValue(),doubleValue(),longValue()方法来将BigDecimal对象转换成对应的值。

关于BigDecimal是如何计算的,我以论坛中一个人的提问帖子为例,来简单的写出BigDecimal的运算方法。题目是:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?

这道题应该是从后往前推,并且要逆运算,最后得出原有酒的体积。

importjava.math.*;
publicclassLibai{
publicstaticvoidmain(Stringargs[]){
BigDecimalvolumn=newBigDecimal("0");
for(inti=0;i<5;i++){
volumn=volumn.add(newBigDecimal("1"));
volumn=volumn.divide(newBigDecimal("2"));
}
System.out.print(volumn);
}
}

运行结果:

0.96875

希望本文所述对大家Java程序设计的学习有所帮助。