如果用户输入是2位小数,如何返回无效? java的

时间:2016-04-02 17:19:44

标签: java double pattern-matching

我是编程新手。 如果用户输入的数字不是#.00。

格式的数字,我一直试图返回无效

我的代码类似于以下

import java.util.Scanner;
import java.text.DecimalFormat;

public class Twodec{
public static void main (String[] args){
Scanner input = new Scanner(System.in);

String abc = input.next();

double n1 = Double.parseDouble(abc);
double n2 = n1%1;
DecimalFormat twoDPattern = new DecimalFormat("#.00");
int n1length = (twoDPattern.format(n2).length()-1);

if (n1length != 2){
System.out.println("Invalid");
}
}
}

然而,由于某种原因,if语句似乎被忽略了。如果我输入21或23.324。它不会返回无效。

2 个答案:

答案 0 :(得分:0)

当您考虑数据格式时,您应该考虑它们的文本表示。这基本上是String操作。

boolean hasTwoDigits = abc.matches("\\d+\\.\\d{2}");

double0.21e2而言,2121.021.0021.000都会变成相同的内部表示,一旦你把它转换成double就没有办法告诉他们,因为它输入的信息已经丢失了。

答案 1 :(得分:0)

我认为你让自己太复杂了......

尝试通过findind / splitting到点或逗号检查小数部分, 然后验证数组第二部分的长度..

实施例

public static void main(String[] args) {


        Scanner input = new Scanner(System.in);

        String abc = input.nextLine();
        String[] decimalIntArray = abc.split("\\.");

        if (decimalIntArray.length != 2) {
            System.out.println("Invalid input.. no decimal part");
        } else if (decimalIntArray[1].length() != 2) {
            System.out.println("Invalid input... there is a decimal part but to long or short...");
        } else {
            System.out.println("THIS IS A VALID INPUT!!!");
        }
    }