应该是小数形式

应该是小数形式

问题描述:

我的程序只有在输入一个十进制数的情况下才能工作。但是当我输入一个整数时它仍然运行。需要帮助应该是小数形式

import java.util.*; 

public class Welcome{ 

     public void CelFar(){ 

     Scanner decimal = new Scanner(System.in); 
     System.out.println("Enter a decimal number: "); 

     try{ 


      double value = decimal.nextDouble(); 
      value = ((value - 32)*5)/9; 

      System.out.println("RESULT : " +value); 


      } 
      catch(InputMismatchException e){ 
       System.out.println("Must be in decimal number ! "); 
      } 


     } 


    } 
+1

没有小数点的数字具有相同的值,如果你加上'.0'它。为什么这是个问题? – Mureinik

+0

我的程序只能以十进制值运行。例如,如果你输入一个整数。必须有一个错误。什么代码应该是 – Simba

+0

@JoeC我的程序只能以十进制值运行。例如,如果你输入一个整数。必须有一个错误。什么代码应该是 – Simba

这不是completelly我清楚你想要达到什么样的事:

  1. 应程序返回错误如果输入值是1.0的例子吗?
  2. 如果输入值为1,程序应该返回错误,但是如果它是1.0,那么可以吗?

如果答案是(1)我只是验证如果返回的十进制可以转换为int或(不失去精度)。 如果答案是(2)(似乎是这样),我只是使用scanner.next(),它返回String,而不是nextDouble()。然后在实际转换为double之前验证String是否可以转换为int。

如果您确实想让42成为错误,但42.0即使它们两个完全相同,也要先通过调用hasNextXxx方法验证输入。

这也解决了您使用异常来捕捉错误输入的问题。

Scanner decimal = new Scanner(System.in); 
for (;;) { // forever loop 
    System.out.println("Enter a decimal number: "); 
    if (decimal.hasNextDouble() && ! decimal.hasNextBigInteger()) { 
     double value = decimal.nextDouble(); 
     value = ((value - 32)*5)/9; 
     System.out.println("RESULT : " +value); 
     break; // exit forever loop 
    } 
    decimal.next(); // consume bad token 
    System.out.println("Must be in decimal number ! "); 
} 

如果你想你的工作计划,因为只有为小数,那么你可以尝试一个黑客,

1您可以通过使用十进制

2-分割字符串的数字转换为字符串字符

小数点后

3-转换字符串中数,并找到它是否大于0或不

4-如果它大于0,那么它是Decima的数L,然后执行操作

5-如果不是那么它的整体数量和抛出异常