扩充:
BigDecimal比较大小
这个类是java里精确计算的类,下面说一下两个BigDecimal对象大小,相等的判断
1 比较对象是否相等
一般的对象用equals,但是BigDecimal比较特殊,举个例子:
BigDecimal a=BigDecimal.valueOf(1.0);
BigDecimal b=BigDecimal.valueOf(1.000);
在现实中这两个数字是相等的,但是如果用 a.equals(b)结果是false;怎么不相等了呢?因为equals是比较内容,“1.0”和“1.000”当然不一样了 解决办法: if(a.compareTo(b)==0) 结果是true
compareTo() 方法用于两种方式的比较:
字符串与对象进行比较。
按字典顺序比较两个字符串。
参数
o – 要比较的对象。
anotherString – 要比较的字符串。
返回值
返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
如果参数字符串等于此字符串,则返回值 0;
如果此字符串小于字符串参数,则返回一个小于 0 的值;
如果此字符串大于字符串参数,则返回一个大于 0 的值。
说明:
如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。
如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。
EG:
public class Test { public static void main(String args[]) { String str1 = "Strings"; String str2 = "Strings"; String str3 = "Strings123"; int result = str1.compareTo( str2 ); System.out.println(result); result = str2.compareTo( str3 ); System.out.println(result); result = str3.compareTo( str1 ); System.out.println(result); } }
以上程序执行结果为:
0 -3 3
BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal (111); //使用compareTo方法比较 //注意:a、b均不能为null,否则会报空指针 if(a.compareTo(b) == -1){ System.out.println("a小于b"); } if(a.compareTo(b) == 0){ System.out.println("a等于b"); } if(a.compareTo(b) == 1){ System.out.println("a大于b"); } if(a.compareTo(b) > -1){ System.out.println("a大于等于b"); } if(a.compareTo(b) < 1){ System.out.println("a小于等于b"); }
加减等
java.math.BigDecimal常用的方法
使用compareTo比较大小,返回结果int类型
0 表示相等 ,1 表示大于, -1 表示大于
// a大于b,即 val = 1;b小于a,即 val2 = -1 BigDecimal a = new BigDecimal(9); BigDecimal b = new BigDecimal(1); int val = a.compareTo(b); System.out.println("a大于b,结果 val = "+val); int val2 = b.compareTo(a); System.out.println("b小于a,结果 val2 = "+val2);
打印结果:
a大于b,结果 val = 1 b小于a,结果 val2 = -1
```java //加法 BigDecimal sum = a.add(b); System.out.println("a + b = " + sum); //减法 BigDecimal c = a.subtract(b); System.out.println("a - b = " + c); //乘法 BigDecimal d = a.multiply(b); System.out.println("a * b = " + d); //除法 BigDecimal e = a.divide(b); System.out.println("a / b = " + e);
打印结果:
a + b = 10 a - b = 8 a * b = 9 a / b = 9
我自己写的demo
if (new BigDecimal(onceAmt).multiply(new BigDecimal(inRule)).compareTo(new BigDecimal(sum)) < 1)
onceAmt*inRule<=sum 的意思