在java中使用Math.floor()时可能会丢失精度错误

时间:2014-12-04 07:03:35

标签: java

当我尝试编译此程序时,它显示以下错误:

src(master)$ javac AmstrongNumber.java

AmstrongNumber.java:26:错误:可能会损失精度           length = Math.floor(Math.log10(输入))+ 1;                                                  ^   required:int

发现:双倍 1错误

任何人都能澄清java中精度错误的缺失吗? 但不是Math.floor()返回一个int值。当我使用(int)类型转换而不是Math.floor()时 显示没有错误 提前谢谢你。

 import java.util.Scanner;
 public class AmstrongNumber {

    public static void main(String[] args) {

      double input;
      int length;
      double copy;
      double output = 0.0;
      double modulus;


      Scanner stdin = new Scanner(System.in);
      System.out.print(" Enter a number : ");
      input = stdin.nextInt();


      // find number of digits in the input
      length = Math.floor(Math.log10(input)) + 1;
      System.out.println();
      System.out.println(" no. of digits in the number is : " + length);
      System.out.println();
      copy = input;

      for(int n = 0; n < length; n++ ) {
        modulus = copy % 10; // find the last digit of the number
        copy = (int) copy / 10; // discarding the last digit
        output = output + Math.pow(modulus, (double)length);
      }

      if((int)input == (int)output) 
         System.out.printf(" %d is a Amstrong number ", (int)input);
      else 
         System.out.printf(" %d is not a Amstrong number ", (int)input);

  }

}

1 个答案:

答案 0 :(得分:1)

  

但Math.floor()不返回int值

没有。请参阅documentation

  

static double floor(double a)返回最大值(最接近正值)   无穷大)小于或等于参数和的双值   等于数学整数。

是的,在这里转换为int是安全的,并且会为您提供所需的结果。