2014-02-17 232 views
0

我正在尋找一個Java示例來檢查用戶輸入的雙精度數值是否包含2個小數位,例如,輸入的99.99將返回有效,輸入99.9或99.999將返回無效。驗證以檢查小數點後兩位的雙精度數

+1

到目前爲止你有什麼? – GaryF

+0

SO不是代碼工廠! –

+1

只要輸入字符串爲'String'(然後它很平凡),你只能這樣做 – Henry

回答

2

試試下面的正則表達式

\d+(\.\d{2})? 
+0

@weston更新 –

+2

怎麼樣使用','來代替'.''或數字格式的國際化 – Jaiwo99

5
Double d = 234.12413; 
String[] splitter = d.toString().split("\\."); 
splitter[0].length(); // Before Decimal Count 
int decimalLength = splitter[1].length(); // After Decimal Count 

if (decimalLength == 2) 
    // valid 
else 
    // invalid 

對於亨利的問題

double d1 = 0.50; 
double d2 = d1%1; 
DecimalFormat df = new DecimalFormat("#.00"); 

int decimalLength = (df.format(d2).length()-1); 

if (decimalLength == 2) 
    //valid 
else 
    // invalid 

注:df.format(d2)回報.50,所以長度3

+2

嗯,什麼關於輸入的數字「0.50」? – Henry

+0

@Henry::)編輯我的答案! –

+1

你錯過了這個觀點,當你有雙重的時候,你不能再區分「1.5」(無效)和「1.50」(有效)的情況。 – Henry

0

還有一個辦法:

//assert that the string is valid number 
String num = "99.99"; // I assume that is `String` because entered by user and not yet converted to `double` 
int i = num.lastIndexOf('.'); 
if(i != -1 && num.substring(i + 1).length() == 2) { 
    System.out.println("The number " + num + " has two digits after dot"); 
} 

*增加 如果你的魔杖使用本地具體decimal separator使用以下expession代替'.'的結果。

DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(); 
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols(); 
//symbols.getDecimalSeparator() == '.'; 
相關問題