【问题标题】:numeric value out of range数值超出范围
【发布时间】:2011-08-02 14:16:24
【问题描述】:

当我保存数据时,它会给出错误,即 NUMERIC VALUE OUT OF RANGE 我已将这 3 个字段作为 MS ACCESS DB 中的数据类型编号

我的手机号是 4343242434,我为此编写了代码:

double mno= Long.parseLong(tfmno.getText());
len = tfmno.getText().length();
if(len!=10) {
JOptionPane.showMessageDialog(null,"Enter The 10 Digit Mobile No","Error",JOptionPane.ERROR_MESSAGE);
return;
}

我的密码是:2222222,我的密码是:

nt pincode=Integer.parseInt(tfpcd.getText());
len1 = tfpcd.getText().length();
if(len1!=7) {
JOptionPane.showMessageDialog(null,"Enter The 7 Digit Pin Code","Error",JOptionPane.ERROR_MESSAGE);
return;
}

我的电话号码是:2222333,我的代码是:

int tele=Integer.parseInt(tftele.getText());
        len2 = tftele.getText().length();
        if(len2!=7){
        JOptionPane.showMessageDialog(null,"Enter The 7 Digit Telephone No","Error",JOptionPane.ERROR_MESSAGE);
        return;
        }

告诉我哪个值正在执行,我应该怎么做

【问题讨论】:

  • 你为什么将它解析为 long 并将其放入 double 中? Long 是 64 位的,double 也是,但由于处理小数所需的内存量,double 不能保存大值。

标签: java ms-access


【解决方案1】:

您没有告诉我们 tftele 是什么,但从调用的方法来看,我猜它是一个 JTextField。

如果是这样,您的问题是,在第一个示例中,您将 long 值分配给 double

double 是一个双精度浮点值,因此它使用了大量分配的 64 位内存来存储小数点后的值。将您的值存储在双精度中是没有意义的,尤其是在它被解析为长整数之后(任何小数位都会引发异常)。

我相信您的代码应该使用 long 值,因为您将其解析为 long。

另外,考虑在执行 X.parseX(text); 时捕获 NumberFormatException也有陈述;以防您的用户在文本字段中键入非数字值。

【讨论】:

    【解决方案2】:

    好吧,应用程序应该告诉你错误在哪个字段/行。

    但是,就像 Jack 已经告诉你的那样,它可能是这行:double mno= Long.parseLong(tfmno.getText());

    顺便说一句,为什么不将值存储为文本?

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2018-04-05
      相关资源
      最近更新 更多