java bigdecimal 减法,java bigdecimal除法并保留小数

java bigdecimal 减法,java bigdecimal除法并保留小数,Java中BigDecimal的加减乘除、比较大小与使用注意事项

对于不需要任何精确计算精度的数字,可以直接使用float或者double,但是如果需要精确的计算结果,就必须使用BigDecimal类,也可以使用BigDecimal类来操作大数。下面这篇文章介绍Java中BigDecimal的加减乘除,大小比较,使用注意事项。有需要的朋友可以参考一下。

前言

借用《Effactive Java》这本书的话,浮子和双型的主要设计目标是为了科学计算和工程计算。它们执行二进制浮点运算,这种运算经过精心设计,可以在很大范围的数值上提供精确而快速的近似计算。但是,它们不能提供完全准确的结果,因此不应在需要准确结果的场合使用。然而,商业计算通常需要精确的结果。在java中,int的最大值是:2147483647。如果你想用一个比这个大的数字呢?换句话说,值很大,所以此时使用BigDecimal。有很多关于BigDecimal的介绍。需要了解的朋友可以参考这篇文章:https://www.jb51.net/article/55395.htm.

一、BigDecimal 的加减乘除

BigDecimal big num 1=new BigDecimal(' 10 ');

BigDecimal big num 2=new BigDecimal(' 5 ');

BigDecimal bignum3=null

//加法

big num 3=big num 1 . add(big num 2);

system . out . println(' and yes:' big num 3 ');

//减法

big num 3=big num 1 . subtract(big num 2);

System.out.println('区别是:' big num 3 ');

//乘法

big num 3=big num 1 . multiply(big num 2);

System.out.println('产品为:' big num 3 ');

//除法

big num 3=big num 1 . divide(big num 2);

System.out.println('商为:' big num 3 ');

运行结果是:

二、BigDecimal 的比较大小。

BigDecimal num 1=new BigDecimal(' 0 ');

BigDecimal num 2=new BigDecimal(' 1 ');

BigDecimal num 3=new BigDecimal(' 2 ');

BigDecimal num=new BigDecimal(' 1 ');//用于比较的值

system . out . println(num 1 . compare to(num));//当小于时,返回-1

system . out . println(num 2 . compare to(num));//当等于时,返回0。

system . out . println(num 3 . compare to(num));//当大于时,返回1。

这是输出结果:

在笔记里解释一下。

补充:

BigInteger也可以存储大数,和BigDecimal的区别在于BigInteger存储大整数,BigDecimal存储大小数。

继续用BigDecimal写一个for循环。

for(BigDecimal I=new BigDecimal(' 0 ');i.compareTo(new BigDecimal('10 ')!=1;I=I . add(new BigDecimal(' 1 ')){

system . out . print(I ' \ t ');

}

控制台从0到10打印。

三、Java中的BigDecimal使用注意事项

1.BigDecial是immutable的,就像String一样,它的所有操作都会生成一个新的对象,所以

amount . add(this amount);

是错误的;应该是:

amount=amount . add(this amount);

2. 不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false;

例如:

BigDecimal a=new BigDecimal(' 2.00 ');

BigDecimal b=new BigDecimal(' 2.0 ');

print(a .等于(b));//假

所以应该使用compareTo()和signum()方法。

a .比较(b);//返回(-1如果a b),(0如果a==b),(1如果a b)

a . signum();//返回(-1,如果a为0),(0,如果a==0),(1,如果a为0)

3. 使用BigDecimal的字符串构造函数,不要使用double参数的构造函数,否则的话会出现你不想要的结果。

比如下面的代码分别使用double和String的构造函数,然后使用HALF_EVEN的round方法,但是输出结果不同:

system . out . println('=================');

for(int I=0;i 10i ) {

string buffer sb=new string buffer();

某人追加(' 0。);

某人追加(一);

某人追加(' 5 ');

BigDecimal bdx=new BigDecimal(sb . tostring());

system . out . println(sb ' ' bdx . set scale(1,RoundingMode。半_偶数));

}

system . out . println('=================');

for(int I=0;i 10i ) {

string buffer sb=new string buffer();

某人追加(' 0。);

某人追加(一);

某人追加(' 5 ');

BigDecimal bdx=new BigDecimal(double . value of(sb . tostring()));

system . out . println(sb ' ' bdx . set scale(1,RoundingMode。半_偶数));

}

输出是:

==================

0.05 0.0

0.15 0.2

0.25 0.2

0.35 0.4

0.45 0.4

0.55 0.6

0.65 0.6

0.75 0.8

0.85 0.8

0.95 1.0

==================

0.05 0.1

0.15 0.1

0.25 0.2

0.35 0.3

0.45 0.5

0.55 0.6

0.65 0.7

0.75 0.8

0.85 0.8

0.95 0.9

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: