我有一个txtbox,你把你的“收入”放进去,然后把它转换成支票来查看你的税金等等。(只是一个简单的税务计算器)
它不允许任何字母/特殊字符等..。
虽然我有一个输入,如'123456d'或'123456f',但它计算时忽略了结尾的字母。
It only与字母D和F一起工作
我只想知道我怎么能解决这个问题,或者为什么会这样?
发布于 2014-03-16 23:26:07
浮点或双文本最终允许具有字符f、F、d和D,因为它们是文字的一部分(用于表示变量的确切类型:float或double)。
Java用于将字符串解析为浮点值的方法可以看到这里。你可以看到:
if ( i < l &&
((i != l - 1) ||
(in.charAt(i) != 'f' &&
in.charAt(i) != 'F' &&
in.charAt(i) != 'd' &&
in.charAt(i) != 'D'))) {
break parseNumber; // go throw exception
}要解决您的问题,您需要以不同的方式解析数字,检查字符串是否以其中一个字符结尾,并在实际扫描之前阻止它。
发布于 2014-03-16 23:27:36
Double.parseDouble()是:
public static double parseDouble(String s) throws NumberFormatException {
return FloatingDecimal.readJavaFormatString(s).doubleValue();
}FloatingDecimal是一个内部类,源是这里。查看源代码,您将看到后缀'D‘、'd’、'F‘和'f’被接受但被忽略(第1233-1236行)。
这可能是存在的,因此字符串格式与,它允许文字上的D/F后缀。语法一致,以指定类型。正如Radiodef在评论中所指出的,它是在Double.valueOf()上记录的。特别是:
请注意,尾随格式说明符,即决定浮点文字类型的说明符(1.0f是浮点数;1.0d是双值),不影响此方法的结果。
在正则表达式中:[fFdD]?
如果您需要显式地不允许这些类型的字符串,那么在将输入字符串解析为double之前,要确保输入字符串不以D/d/F/f结尾。
发布于 2014-03-16 23:24:57
如果要确保输入数据仅为nummeric (或. ),则需要检查每个字符的有效性。听起来像家庭作业所以没有密码。
您可以通过考虑状态图来检查有效性:
https://stackoverflow.com/questions/22444457
复制相似问题