【问题标题】:Cannot find symbol using BigDecimal使用 BigDecimal 找不到符号
【发布时间】:2011-02-11 16:37:02
【问题描述】:

我第一次尝试使用 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 的值。

我想了解为什么我会收到以下错误消息:

找不到符号

方法减法(int)

不是在寻找关于阶乘的讨论,而是关于 BigDecimal(或 BigInteger)的使用。我正在使用 BigDecimal,因为在稍后阶段我需要除法,从而产生浮点数。

编辑

编辑 2

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

【问题讨论】:

  • 正如我的回答中已经提到的。你不能减去 i 因为它不是 BigInteger。

标签: java bigdecimal


【解决方案1】:

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

而且参数也必须是 BigInteger:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这应该可行:

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

      【讨论】:

      • @ALL:感谢您的及时回复。现在一切都变得更有意义了!
      • 有趣的是,你犯了同样的错字——“减”是“减”。
      • 复制粘贴而不注意。
      【解决方案4】:

      错字 - 你拼错了“减”。

      【讨论】:

        【解决方案5】:

        应该是subtract(带一个s)

        每当您看到找不到符号消息时,您都在尝试使用不存在的方法或不存在的变量。大多数情况下(如本例所示)是由于拼写错误或您没有导入该类。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            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
            
            猜你喜欢
            • 1970-01-01
            • 2014-04-11
            • 2013-09-12
            • 2013-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-01
            • 1970-01-01
            相关资源
            最近更新 更多