首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双倍接受信件

双倍接受信件
EN

Stack Overflow用户
提问于 2014-03-16 23:19:55
回答 3查看 1.9K关注 0票数 1

我有一个txtbox,你把你的“收入”放进去,然后把它转换成支票来查看你的税金等等。(只是一个简单的税务计算器)

它不允许任何字母/特殊字符等..。

虽然我有一个输入,如'123456d''123456f',但它计算时忽略了结尾的字母。

It only与字母DF一起工作

我只想知道我怎么能解决这个问题,或者为什么会这样?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-16 23:26:07

浮点或双文本最终允许具有字符fFdD,因为它们是文字的一部分(用于表示变量的确切类型:floatdouble)。

Java用于将字符串解析为浮点值的方法可以看到这里。你可以看到:

代码语言:javascript
复制
    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
        }

要解决您的问题,您需要以不同的方式解析数字,检查字符串是否以其中一个字符结尾,并在实际扫描之前阻止它。

票数 4
EN

Stack Overflow用户

发布于 2014-03-16 23:27:36

Double.parseDouble()是:

代码语言:javascript
复制
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结尾。

票数 1
EN

Stack Overflow用户

发布于 2014-03-16 23:24:57

如果要确保输入数据仅为nummeric (或. ),则需要检查每个字符的有效性。听起来像家庭作业所以没有密码。

您可以通过考虑状态图来检查有效性:

  1. 在小数点之前。只接受数字,如果十进制接受并移到状态2,则保持在状态1。
  2. 如果数字不超过2位数 ……
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22444457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档