Java中BigDecimal的加减乘除、⽐较⼤⼩与使⽤注意事项前⾔
⼀、BigDecimal 的加减乘除
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);
运⾏结果为:
⼆、BigDecimal 的⽐较⼤⼩。
BigDecimal num1 = new BigDecimal("0");
BigDecimal num2 = new BigDecimal("1");
BigDecimal num3 = new BigDecimal("2");
BigDecimal num = new BigDecimal("1"); //⽤做⽐较的值
System.out.println(num1pareTo(num)); //⼩于时,返回 -1
System.out.println(num2pareTo(num)); //等于时,返回 0
System.out.println(num3pareTo(num)); //⼤于时,返回 1
这是输出结果:
解释下注释⾥⾯了。
补充:
BigInteger 也可以存放⽐较⼤的数,和 BigDecimal 的区别是:BigInteger 存放的是⼤的整数,⽽BigDecimal 存放⼤的⼩数继续补充⼀下,⽤BigDecimal 写个for循环。
for (BigDecimal i = new BigDecimal("0"); ipareTo(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( thisAmount );
是错误的;⽽应该是:
amount = amount.add( thisAmount );
2. 不要⽤equals⽅法来⽐较BigDecimal对象,因为它的equals⽅法会⽐较scale,如果scale不⼀样,它会返回false;
例如:
BigDecimal a = new BigDecimal("2.00");
BigDecimal b = new BigDecimal("2.0");
print(a.equals(b)); // false
所以你应该使⽤compareTo()和signum()⽅法
apareTo(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⽅法,但是输出结果不⼀样: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 String());
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.String()));
bigdecimal除法保留小数System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
}
输出是:
==================
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
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论