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