2014-02-17 176 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() == '.'; 
相关问题