Как использовать BigInteger и десятичные числа? - PullRequest
4 голосов
/ 22 февраля 2012

как мне использовать десятичные числа с большими числами?

Я бы заподозрил, как я написал, но obv это не удается:

@Test
public void bigIntegerTestCalcs() {
    BigInteger a = new BigInteger("20");
    BigInteger b = new BigInteger("20.20");
    BigInteger result = a.add(b);

    assertEquals(new BigInteger("40.20"), result);
}

не удается с:

java.lang.NumberFormatException: For input string: "20.20"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.math.BigInteger.<init>(BigInteger.java:338)
    at java.math.BigInteger.<init>(BigInteger.java:476)
    at src.test.unit.CalculatorTest.bigIntegerTestCalcs(CalculatorTest.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:105)
    at org.unitils.UnitilsJUnit4TestClassRunner$TestListenerInvokingMethodRoadie.runTestMethod(UnitilsJUnit4TestClassRunner.java:174)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
    at [...]

Ответы [ 3 ]

11 голосов
/ 22 февраля 2012
BigInteger b = new BigInteger("20.20");

20.20 не является целым числом.

То, что вы хотите:

BigDecimal b = new BigDecimal("20.20");
5 голосов
/ 22 февраля 2012

Int остается int независимо от того, как сильно вы пытаетесь; -)

Попробуйте вместо этого BigDecimal.

2 голосов
/ 22 февраля 2012

BigInteger для целых чисел (то есть чисел без десятичной точки). Вы пытаетесь использовать его для работы с плавающими числами. Для этого используйте BigDecimal.

...