使用BigDecimal找不到符号

时间:2011-02-11 16:37:02

标签: java bigdecimal

我正在尝试使用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,因为在稍后阶段我需要分割,从而产生浮点。

修改

编辑2

首先编辑删除(代码)以使帖子更具可读性 - 正确的代码已由一位善良的程序员发布在下面

7 个答案:

答案 0 :(得分:5)

因为该方法被命名为减法而不是减法。

参数也必须是BigInteger:

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

答案 1 :(得分:2)

您正试图从int中减去BigDecimal。由于subtract(int x)类上没有方法BigDecimal,因此会出现cannot find symbol编译器错误。

答案 2 :(得分:1)

错字 - 你拼错了“减去”。

答案 3 :(得分:1)

应该是subtract(单个s)

每当您看到找不到符号消息时,您就会尝试使用不存在的方法或不存在的变量。大部分时间(如本例所示)由于拼写错误或因为您没有导入该类。

答案 4 :(得分:1)

这应该有效:

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)方法。

答案 5 :(得分:0)

BigDecimal只能减去另一个BigDecimal。你正在减去一个int。见

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

答案 6 :(得分:0)

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