2015-09-04 44 views
1

我需要一种方法将其表达为有效的java代码:我有2 BigDecimals,我想知道如果较小的BigDecimal可以(当添加到更大的BigDecimal一次)改变更大的BigDecimal的组成部分。例如:测试BigDecimal是否可以改变其他BigDecimal的组成部分

0.6; 0.4 ->true 

0.6; 0.39 ->false 

是否有任何有效的方法来做到这一点,还是我必须测试?

+0

当较小的bigDecimal添加一次到什么时候? – ninesalt

+0

到更大的大小。 – Distjubo

+0

为什么一个是真的,另一个是假的?你能准确地表达你的要求吗? – EJP

回答

2

你可以做这样的事情:

BigDecimal b1 = new BigDecimal("0.90"); 
BigDecimal b2 = new BigDecimal("0.20"); 
if(b1.add(b2).intValue() > Math.max(b1.intValue(), b2.intValue())){ 
    System.out.println("The integral has changed"); 
}else { 
    System.out.println("The integral is the same"); 
} 

intValue()方法的工作原理:

将此BigDecimal转换为int。此转换类似于从双短... 规范的基本收缩转换:此BigDecimal的小数部分将被丢弃......以上

+0

这不适用于非常大的数字。由于OP使用'BigDecimal',你必须考虑非常大的非小数部分的可能性。一个例子是BigDecimal bigA = new BigDecimal(Integer.MAX_VALUE +“.90”);' – alkis

0

我已经编辑了我的答案后意识到提图斯的答案更简单。信用归功于他/她。

public static boolean integral(BigDecimal a, BigDecimal b) { 

    BigDecimal greater; 

    if (a.compareTo(b) == 1) { 
     greater = a; 
    } else { 
     greater = b; 
    } 

    BigDecimal sum = a.add(b); 

    return (sum.intValue() != greater.intValue()); 
} 
+0

'charAt(0)'well ..,'integral(new BigDecimal(“13.39”),new BigDecimal(“0.7”))'return false – Hacketo

+0

好点。编辑。 – ninesalt

+0

当比较字符串时,你必须使用'equals'而不是'=='或'!=' – Hacketo

0
private static boolean isNonFractionalChanged(BigDecimal a, BigDecimal b) { 
    BigInteger aInt = a.toBigInteger(); 
    BigInteger aNewInt = a.add(b).toBigInteger(); 

    return aInt.compareTo(aNewInt) != 0; 
} 

的作品即使是非常大的数字。

BigDecimal a = new BigDecimal("0.90"); 
BigDecimal b = new BigDecimal("0.20"); 
System.out.println(a + " + " + b + " = " + a.add(b) + " : " + isNonFractionalChanged(a, b)); 

BigDecimal bigA = new BigDecimal(Integer.MAX_VALUE + ".90"); 
System.out.println(bigA + " + " + b + " = " + bigA.add(b) + " : " + isNonFractionalChanged(bigA, b));