带有负数的数字类型解析函数异常

Posted

技术标签:

【中文标题】带有负数的数字类型解析函数异常【英文标题】:numeric type parse functions exception with negative numbers 【发布时间】:2020-07-04 19:51:48 【问题描述】:
System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception

当我尝试使用 parseInt 或 valueOf 方法将十六进制数转换为整数类型、负数时,该方法会为负数抛出 NumberFormatException。我在任何地方都找不到答案。

【问题讨论】:

FFFFFFFF 超出了我认为的整数范围。 【参考方案1】:

Integer.parseInt("FFFFFFFF", 16) 并不意味着“给我这个十六进制位模式的int”。它的意思是“将FFFFFFFF 解释为一个数字的base-16 表示,并给我一个代表相同数字的int”。

这个数字是 数字 4294967295,它超出了 int 的范围,因此例外。

【讨论】:

【参考方案2】:

Integer.parseInt()Integer.valueOf() 期望负号 (-) 表示负值。

因此“FFFFFFFF”被解析为大于Integer.MAX_VALUE的正值。因此例外。

如果要将其解析为负值,请将其解析为long并转换为int

System.out.println((int)Long.parseLong("FFFFFFFF", 16));

打印

-1

【讨论】:

以上是关于带有负数的数字类型解析函数异常的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 可以输入负数、正数、小数(小数保留一位)。

使用VBA为负数设置带有千位分隔符、2位小数和减号的标准数字格式?

数字前面加负数怎么设置

如何检查一个数字是不是为负数?

php 如何将数字 负号去除

如何对表示数字(正数和负数以及小数部分)的字符串数组进行排序?