java - long 不应该足够大以能够存储电话号码吗?

标签 java

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

这是代码

public class StudentNode
{
    public long TelNumber;

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

long 不应该足够大以能够存储电话号码吗?

最佳答案

电话号码不是数字。它们是字符串。例如,在英国和许多其他欧洲国家,完整电话号码的第一位数字是 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 的形式。你明白了。

关于java - long 不应该足够大以能够存储电话号码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805409/

相关文章:

java - 设置数组大小并将用户输入的字符串解析到数组中

java - 如何为两个解析器语法制作相同的词法分析器

java - HQL - 两个相同查询之间的差异

java - 如何验证(通过单元测试)错误堆栈是否打印在日志文件中?

java - XPTY0004 : Required item type of first operand of '>' is numeric; supplied value has item type xs:string

java - Jetty 延续/AJAX 推送 : Timeout best-practices?

java - 如何防止Java中BufferedReader readLine()方法的Dos攻击?

Java BeanUtils 带下划线 (_) 的未知属性

java - 问题跟踪程序 - ArrayList 中的对象

java - 在 GWT 中查找应用程序名称