Java 验证包含2个小数位的双精度字符是否有效的简单方法是什么?

Java 验证包含2个小数位的双精度字符是否有效的简单方法是什么?,java,Java,我正在寻找一个Java示例,以检查用户输入的双倍金额是否包含2个小数位,例如,输入的99.99将返回有效,输入的99.9或99.999将返回无效。请尝试以下正则表达式 \d+(\.\d{2})? 亨利的问题 注意:df.format(d2)返回.50,因此长度是3,还有一种方法: //assert that the string is valid number String num = "99.99"; // I assume that is `String` because entered

我正在寻找一个Java示例,以检查用户输入的双倍金额是否包含2个小数位,例如,输入的99.99将返回有效,输入的99.9或99.999将返回无效。

请尝试以下正则表达式

\d+(\.\d{2})?
亨利的问题

注意:
df.format(d2)
返回
.50
,因此长度是
3

,还有一种方法:

//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");
}
*增加 如果您想使用特定于本地的
十进制分隔符
,请使用以下表达式的结果,而不是

DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
//symbols.getDecimalSeparator() == '.';

到目前为止你有什么?没有代码工厂的家伙!你只能这样做,只要你把输入作为
字符串
(这很简单)这个问题的罪过是它不是作为带“?”的问题来问的。但背景足够具体,可以提交有用和具体的答案。也许这是一个离题的问题,或者在这个论坛上不是一个合适的问题?嗯,输入的数字“0.50”呢?@Henry::)编辑了我的答案!你没有抓住要点,当你有一个double时,你不能再区分“1.5”(无效)和“1.50”(有效)两种情况。然后,你应该检查字符串。如果长度为2,最后一个数字为零,则返回Valid。那么使用
而不是
分割数字,或者更确切地说,使用国际化的数字格式
\d+\。\d{2}
来确保数字正好位于小数点后2位如何
//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");
}
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
//symbols.getDecimalSeparator() == '.';