当我尝试编译此程序时,它显示以下错误:
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);
}
}
答案 0 :(得分:1)
但Math.floor()不返回int值
没有。请参阅documentation
static double floor(double a)返回最大值(最接近正值) 无穷大)小于或等于参数和的双值 等于数学整数。
是的,在这里转换为int是安全的,并且会为您提供所需的结果。