我想检查String
是否包含Double
而不是Integer
。我正在以这种方式工作;
private boolean isDouble(String str) {
try {
Double.parseDouble(str);
return true;
}
catch(NumberFormatException e) {
return false;
}
}
为了检查它,我只是通过了;
isDouble("123");
但它不起作用,在两种条件下都给出true
(" 123"," 123.99")。这有什么不对?
答案 0 :(得分:3)
如果你想检查它是否是一个不适合整数的数字,你可以对双重进行舍入。例如。利用round(1.2) != 1.2
,round(1) == 1
。
private boolean isDouble(String str) {
try {
// check if it can be parsed as any double
double x = Double.parseDouble(str);
// check if the double can be converted without loss to an int
if (x == (int) x)
// if yes, this is an int, thus return false
return false;
// otherwise, this cannot be converted to an int (e.g. "1.2")
return true;
// short version: return x != (int) x;
}
catch(NumberFormatException e) {
return false;
}
}
答案 1 :(得分:0)
您可以使用Scanner(String)并使用hasNextDouble()方法。来自它的javadoc:
如果使用nextDouble()方法可以将此扫描器输入中的下一个标记解释为double值,则返回true。 例如:
if(source.contains(".")){
Scanner scanner = new Scanner(source);
boolean isDouble = scanner.hasNextDouble();
return isDouble;
}
return false;
答案 2 :(得分:0)
您也可以先解析为double
,然后测试double
是否为int
。
private void main() {
String str = "123";
Double value = parseDouble(str);
boolean isInt = isInt(value);
}
private void isInt(Double value) {
if(value != null) {
return (value == (int) value) ? true : false;
}
return false;
}
private double parseToDouble(String str) {
Double value = null;
try {
value = Double.parseDouble(str);
}
catch(NumberFormatException e) {
// Do something
}
return value;
}
答案 3 :(得分:0)
问题是由于 1.00为1并且它是双。
这意味着您无法简单地解析double
并假装代码检测到自身是否为int
。为此你应该添加一个支票,我认为最简单的是:
private boolean isDouble(String str) {
try {
double myDouble = Double.parseDouble(str);
myDouble -= (int)myDouble; //this way you are making the (for example) 10.3 = 0.3
return myDouble != (double)0.00; //this way you check if the result is not zero. if it's zero it was an integer, elseway it was a double
}
catch(NumberFormatException e) {
return false;
}
}
我是在没有编辑的情况下完成的,所以请告诉我是否有问题。
希望这有帮助
答案 4 :(得分:0)
检查简单代码
private boolean isDecimalPresent(d){
try {
return d%1!=0;
}
catch(NumberFormatException e) {
return false;
}