gpt4 book ai didi

Java中BigDecimal的加减乘除、比较大小与使用注意事项

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java中BigDecimal的加减乘除、比较大小与使用注意事项由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

借用《effactive java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,在java 里面,int 的最大值是:2147483647,现在如果想用比这个数大怎么办?换句话说,就是数值较大,这时候就用到了bigdecimal ,关于bigdecimal 的介绍有很多,需要了解的朋友可以参考这篇文章:http://www.zzvips.com/article/34898.html 。

1、bigdecimal 的加减乘除 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bigdecimal bignum1 = new bigdecimal( "10" );
bigdecimal bignum2 = new bigdecimal( "5" );
bigdecimal bignum3 = null ;
 
//加法
bignum3 = bignum1.add(bignum2);
system.out.println( "和 是:" + bignum3);
 
//减法
bignum3 = bignum1.subtract(bignum2);
system.out.println( "差 是:" + bignum3);
 
//乘法
bignum3 = bignum1.multiply(bignum2);
system.out.println( "积 是:" + bignum3);
 
//除法
bignum3 = bignum1.divide(bignum2);
system.out.println( "商 是:" + bignum3);

运行结果为:

Java中BigDecimal的加减乘除、比较大小与使用注意事项

2、bigdecimal 的比较大小.

?
1
2
3
4
5
6
7
8
9
bigdecimal num1 = new bigdecimal( "0" );
bigdecimal num2 = new bigdecimal( "1" );
bigdecimal num3 = new bigdecimal( "2" );
 
bigdecimal num = new bigdecimal( "1" ); //用做比较的值
 
system.out.println(num1.compareto(num)); //小于 时,返回 -1
system.out.println(num2.compareto(num)); //等于 时,返回 0
system.out.println(num3.compareto(num)); //大于 时,返回 1

这是输出结果:

Java中BigDecimal的加减乘除、比较大小与使用注意事项

解释下注释里面了.

补充:

biginteger 也可以存放比较大的数, 和 bigdecimal 的区别是 :biginteger 存放的是大的整数,而bigdecimal 存放大的小数 。

继续补充一下,用bigdecimal 写个for循环.

?
1
2
3
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 .

3、java中的bigdecimal使用注意事项 。

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

?
1
amount.add( thisamount );

是错误的;而应该是:

?
1
amount = amount.add( thisamount );

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

例如:

?
1
2
3
bigdecimal a = new bigdecimal( "2.00" );
bigdecimal b = new bigdecimal( "2.0" );
print(a.equals(b)); // false

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

?
1
2
a.compareto(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)

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

例如下面的代码分别使用double和string的构造函数,然后使用half_even的round方法,但是输出结果不一样:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
system.out.println( "==================" );
for ( int i = 0 ; i < 10 ; i ++) {
  stringbuffer sb = new stringbuffer();
  sb.append( "0." );
  sb.append(i);
  sb.append( "5" );
  bigdecimal bdx = new bigdecimal(sb.tostring());
  system.out.println(sb + " " +bdx.setscale( 1 , roundingmode.half_even));
}
 
system.out.println( "==================" );
for ( int i = 0 ; i < 10 ; i ++) {
  stringbuffer sb = new stringbuffer();
  sb.append( "0." );
  sb.append(i);
  sb.append( "5" );
  bigdecimal bdx = new bigdecimal( double .valueof(sb.tostring()));
  system.out.println(sb + " " +bdx.setscale( 1 , roundingmode.half_even));
}

输出是:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
==================
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

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.

原文链接:http://blog.csdn.net/limingchuan123456789/article/details/12524495 。

最后此篇关于Java中BigDecimal的加减乘除、比较大小与使用注意事项的文章就讲到这里了,如果你想了解更多关于Java中BigDecimal的加减乘除、比较大小与使用注意事项的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com