Java > 将整数转换为双精度浮点数(使用Scanner和System.out)

3

这是我的第一个问题,希望有人能帮忙:

我正在尝试编写下一个程序: 我有1个输入和最多2个输出 首先,我检查输入是否为(int!) 如果是TRUE,我会打印出消息“YES IT IS INTEGER”,并显示“保存的数字在变量int中”,

但是,如果我输入double,则想要打印出消息=“NO it is not INT”+ 并以double格式显示它!

当我输入int时一切正常,但是当我输入double时就不正确。

public class Scan {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int check;
            System.out.println("Your number? ");

        if(sc.hasNextInt()){
        check=sc.nextInt();
            System.out.println("OKEI "+check+ " IT IS INTEGER! ");}
        else if(sc.hasNextDouble()){
        check=sc.nextDouble();
            System.out.println("Nooo " + check + " NO it is not INT");
            }
    }

}

当我输入双倍时,它不正确是什么意思? - Jens
@Jens 他可能意思是他输入了一个double,但它的行为像一个整数(因为他存储该double输入的变量是一个整数)。 - Tim Biegeleisen
请注意,Double格式取决于所使用的Locale,因此根据系统配置,Double可能是1.251,25 - AxelH
4个回答

2

一种解决方案是将check定义为double,并将检查改为:

if (check == Math.floor(check))

在你的解决方案中,你试图将一个double赋值给一个int。由于它不适合,它会失去精度并被截断。
最终解决方案应如下:
Scanner sc = new Scanner(System.in);
check = sc.nextDouble();
if (check == Math.floor(check)) {
    // an "int"
} else {
    // not integer
}

我本来会使用 if(check - (int) check == 0),但这并没有什么区别。 - AxelH
谢谢 Maroun Maroun,我想这是第一次不使用数学库),当然舒适)。 - Moka017

2
创建一个新的double变量,并将sc.nextDouble()赋值给该double变量。
示例: double checkDouble; ....
else if(sc.hasNextDouble()){
    checkDouble=sc.nextDouble();
        System.out.println("Nooo " + check + " NO it is not INT");
        }

1

在Eclipse中尝试您的代码时,使用check = sc.nextDouble()(其中check是一个int)出现了错误,您可以像这样修复它:

  public static void main(final String[] args) {
    System.out.println("Your number? ");
    final Scanner sc = new Scanner(System.in);
    if (sc.hasNextInt()) {
      final int check = sc.nextInt();
      System.out.println("OKEI " + check + " IT IS INTEGER! ");
    } else if (sc.hasNextDouble()) {
      final double check = sc.nextDouble();
      System.out.println("Nooo " + check + " NO it is not INT");
    } else {
      System.out.println("Failed.");
    }
  }

这样,使用Math.floor或强制类型转换时,您就不会丢失任何小数部分。


谢谢,你的代码和Lwax的回答一样。但是我看到了常量(final),请问为什么我们要使用它? - Moka017
因为我的Eclipse配置了所有变量/参数/成员不被修改为final。为什么要使用它呢?禁止更改值(或对象的引用)-我认为在参数/成员的情况下这很重要,而在变量的情况下则较少。 - NoDataFound

0

将int转换为double值,可能会有帮助。

else if (sc.hasNextDouble()) {
            check = (int) sc.nextDouble();
            System.out.println("Nooo " + check + " NO it is not INT");
        }

我输入了1.25,我的消息是(不!1不是整数),所以1.25转换为1(我试图让它保持相同 == 1.25) - Moka017

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接