2009-07-27 55 views

回答

3

我不認爲這是可能的StringTokenizer,它太舊了。您可以使用掃描儀來完成這項工作:

該類
Scanner fi = new Scanner("string 200 200.0"); 
fi.useLocale(Locale.US); 

while (fi.hasNext()) { 
    if (fi.hasNextInt()) { 
     System.out.println("Integer: " + fi.nextInt()); 
    } else if (fi.hasNextDouble()) { 
     System.out.println("Double: " + fi.nextDouble()); 
    } else { 
     System.out.println("String: " + fi.next()); 
    } 
} 

文檔是here

0

我會使用模運算符:

if (yourNval % 1 > 0) 
{ 
    // nval is floating point. 
} 
else 
{ 
    // nval is an integer. 
} 

這工作,因爲在Java中,以及整數模works with floating point numbers

更新:既然你指定一個需要從零值小數部分雙打區分整數,我認爲你必須做一些這樣的:

Double(yourNval).toString().indexOf('.'); 

所以一個更完整的功能看起來像:

if (yourNval % 1 > 0) 
{ 
    // nval is floating point. 
} 
else 
{ 
    // nval is an integer. 

    // Find number of trailing zeroes. 
    String doubleStr = Double(yourNval).toString(); 
    int decimalLoc = doubleStr.indexOf('.'); 
    int numTrailingZeroes = 0; 

    if (decimalLoc > 0) 
    { 
     numTrailingZeroes = doubleStr.length() - decimalLoc - 1; 
    } 
} 
+0

謝謝您anwser,但是這並沒有告訴我,如果輸入的是「200.0」或「200」。 – Pierre 2009-07-27 12:11:42

+0

我已經添加了上面的代碼來確定整數`nval`輸入包含的尾隨零的數量。你的例子`200.0`將導致`numTrailingZeroes`的值爲`1`。 – 2009-07-27 12:55:34

0

當你基本上是想弄清楚如果doubleint與否,你可以創建一個BigDecimal並測試其scale()方法。您也可以使用Math靜態方法floor()並針對原始值測試返回值。

if(Math.floor(myStreamTokenizer.nval) == myStreamTokenizer.navl)) { 
    //treat it as an int 
} else { 
    //treat it as a double 
} 

在這兩個,我會用Math.floor選擇,因爲它會更有效。

相關問題