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

如果用户输入是2位小数,如何返回无效?JAVA,java,double,pattern-matching,Java,Double,Pattern Matching,我是编程新手。 如果用户输入的数字不是#.00格式的数字,我一直试图返回invalid 我的代码类似于下面的代码 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(); dou

我是编程新手。 如果用户输入的数字不是#.00格式的数字,我一直试图返回invalid

我的代码类似于下面的代码

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。它不会返回无效。

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

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

double
0.21e2
21
21.0
21.00
21.000
而言,它们都变成了相同的内部表示形式,一旦你把它转换成双倍密码,就无法区分它们了,因为关于它是如何输入的信息已经丢失了。

我认为你把自己弄得太复杂了

尝试通过查找/拆分为点或逗号来检查小数部分, 然后验证阵列第二部分的长度

例子:
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!!!");
        }
    }