不应该长到能够存储电话号码吗?

时间:2012-01-10 15:05:19

标签: java

使用long或float设置手机号码变量时,会显示“错误:整数到大:07859664443”

这是代码

public class StudentNode
{
    public long TelNumber;

    public void setTelNumber(long aTelNumber)
    {
        TelNumber = aTelNumber;
    }
}

不应该长到足以存储电话号码吗?

2 个答案:

答案 0 :(得分:5)

电话号码不是数字。他们是字符串。例如,在英国和许多其他欧洲国家,完整电话号码的第一个数字是0.但是像long这样的简单数字类型无法指示前导0是重要的,数字07859 664 443将是值7859664443。领先零是重要的。另外,看到这样写的数字并不罕见:+44(0)7859 664 443.把它放在你的long中并尝试吸烟。 : - )

此外,格式很重要。 07859 664 443比07859664443更容易阅读和拨号。在美国,他们经常将区号放在括号中:(800)123-4567,这对我们穷人来说比8001234567更容易处理。

根据我的经验,处理电话号码的最佳方法是将它们存储为字符串,主要是为了将它们保留为输入方式,除非您想将应用程序限制为在非常有限的地理位置使用的电话号码区域 - 即使这样,事情也会发生变化。尝试在应用程序中构建格式规则会立即引入维护项目。例如,当(美国)遇到其当前(xxx)yyy-zzzz格式的限制时,巨大的数量的应用程序将需要更新。痛苦的。同样,我前几天使用了一个应用程序,假设所有英国数字都是(xxxxx)nnn nnn。这已不再适用,现在大都市区(xxx)nnnn nnnn,而我们更多的乡村类型仍旧旧系统。在过去十年开始的一段时间里,伦敦的数字形式为(xxxx)nnn nnnn。你明白了。

答案 1 :(得分:2)

您向我们展示的代码无法提供您主题中提到的编译错误。真正的问题是整数文字以0开头,使其成为八进制(基数为8)常量。一些数字(8和9)在八进制文字中无效。

正如其他几位人士已经指出的那样,手机“号码”应该表示为String,而不是long或任何其他数字类型,以便您可以避免此问题以及其他许多问题。< / p>