Не удается найти символ с помощью BigDecimal - PullRequest
2 голосов
/ 11 февраля 2011

Я делаю свои первые попытки использовать BigDecimal. Это кажется хитрым. У меня проблема, и я хотел бы понять, что ее вызывает.

public static String nominator(String nbrPeople)
{
    BigDecimal nom = new BigDecimal("365") ;
    BigDecimal days = new BigDecimal("365") ;
    int limit = Integer.parseInt(nbrPeople);
    for (int i = 0 ; i < limit ; i++ )
    {
        days = days.substract(i) ;
        nom = nom.multiply(days) ;
    }
    return  nbrPeople ;
}

это часть большой программы. это метод, который должен вычислять что-то вроде этого:

365 x (365-1) x (365-2) x (365-3) и т. Д. В зависимости от значения nbrPeople, переданного.

Я хотел бы понять, почему я получаю следующее сообщение об ошибке:

не может найти символ

метод substract (int)

не для обсуждения факториалов, а для использования BigDecimal (или BigInteger). Я использую BigDecimal, потому что на более позднем этапе мне нужно будет делить, в результате чего с плавающей запятой.

EDIT

РЕДАКТИРОВАТЬ 2

удалено первое редактирование (код), чтобы сделать сообщение более читабельным - правильный код был опубликован ниже добрым программистом

Ответы [ 7 ]

5 голосов
/ 11 февраля 2011

Поскольку метод называется вычитать, а не вычитать.

И параметр тоже должен быть BigInteger:

http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html#subtract(java.math.BigInteger)

2 голосов
/ 11 февраля 2011

Вы пытаетесь вычесть int из BigDecimal.Поскольку в классе BigDecimal нет метода subtract(int x), вы получите ошибку компилятора cannot find symbol.

1 голос
/ 11 февраля 2011

Это должно работать:

public static String nominator(String nbrPeople)
{
    BigDecimal nom = new BigDecimal("365") ;
    BigDecimal days = new BigDecimal("365") ;
    int limit = Integer.parseInt(nbrPeople);
    for (int i = 0 ; i < limit ; i++ )
    {
        days = days.subtract(new BigDecimal(i)) ;
        nom = nom.multiply(days) ;
    }
    return  nbrPeople ;
}

, поскольку нет метода BigDecimal.subtract(int), только метод BigDecimal.subtract(BigDecimal).

1 голос
/ 11 февраля 2011

Должно быть вычитать (с одним с)

Всякий раз, когда вы видите сообщение не может найти символ , вы пытаетесь использовать метод, который не существуетили переменная, которая не существует.Большую часть времени (как в этом случае) из-за ошибки или из-за того, что вы не импортировали класс.

1 голос
/ 11 февраля 2011

опечатка - вы ошиблись "вычитать".

0 голосов
/ 09 июня 2017

http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#subtract(java.math.BigDecimal

import java.math.BigDecimal;
import java.util.Scanner;

public class BigDecimal_SumExample {

    public static void main(String args[]) {

        BigDecimal  number1;
        BigDecimal  number2;
        BigDecimal  sum;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the value of number 1");
        number1 = sc.nextBigDecimal();
        System.out.println("Enter the value of number 2");
        number2 = sc.nextBigDecimal();


        BigDecimal a = new BigDecimal(""+number1);
        BigDecimal b = new BigDecimal(""+number2);
        BigDecimal result = a.add(b);

        System.out.println("Sum is Two numbers : -> ");
        System.out.println(result);

    }
}

**Output is** 

Enter the value of number 1
68237161328632187132612387312687321678312612387.31276781237812

Enter the value of number 2
31232178631276123786321712369812369823162319862.32789129819299

Sum is Two Big Decimal numbers : -> 
99469339959908310918934099682499691501474932249.64065911057111
0 голосов
/ 11 февраля 2011

BigDecimal может только вычесть другой BigDecimal.вы вычитаете int.См

http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#subtract(java.math.BigDecimal)

...