我是编程新手。 如果用户输入的数字不是#.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。它不会返回无效。
答案 0 :(得分:0)
当您考虑数据格式时,您应该考虑它们的文本表示。这基本上是String
操作。
boolean hasTwoDigits = abc.matches("\\d+\\.\\d{2}");
就double
值0.21e2
而言,21
,21.0
,21.00
和21.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!!!");
}
}