线程“主”中的异常java.lang.NumberFormatException:对于输入字符串:基数16下的“ 9000000000000000”

问题描述

我尝试运行此代码,但发生错误。

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

我们知道long的最小数量是-9,223,372,036,854,775,808,而0x9000000000000000是-8,070,450,532,247,928,832为什么会发生错误?

解决方法

9000000000000000以16为基的正数,因为没有符号。由于long已签名,因此它可以容纳的最大数字为0x7FFF_FFFF_FFFF_FFFF。所以你太厉害了。

如果您想要-8,070,450,532,247,928,832,832,请使用parseUnsignedLong()

        System.out.println(Long.parseUnsignedLong("9000000000000000",16));

输出:

-8070450532247928832

现在接受的值为0xFFFF_FFFF_FFFF_FFFF。

,

引用Long#parseLong(String,int)

如果以下任何一个被抛出,则抛出NumberFormatException类型的异常。 发生以下情况:

  • 第一个参数为null或长度为零的字符串。
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX。
  • 字符串的任何字符都不是指定基数的数字,但第一个字符可以是减号'-'('\ u002d')或加号'+'('\ u002B'),但前提是字符串长于长度1。
  • 字符串表示的值不是long类型的值。

示例:
parseLong(“ 0”,10)返回0L
parseLong(“ 473”,10)返回473L
parseLong(“ + 42”,10)返回42L
parseLong(“-0”,10)返回0L
parseLong(“-FF”,16)返回-255L
parseLong(“ 1100110”,2)返回102L
parseLong(“ 99”,8)引发NumberFormatException
parseLong(“ Hazelnut”,10)引发NumberFormatException
parseLong(“ Hazelnut”,36)返回1356099454469L

使用基数16解析的十进制值为10376293541461622784,该值大于Long.MAX_VALUE(9223372036854775807),违反了以下条件:

字符串表示的值不是long类型的值

因此抛出NumberFormatException

import java.math.BigInteger;

public class ParseLong {
    public static void main(String[] args) {
        System.out.println("Max Long value :" + Long.MAX_VALUE);
        System.out.println("Min Long value :" + Long.MIN_VALUE);
        System.out.println("Value without overflow " + new BigInteger("9000000000000000",16));
        System.out.println("Value by parseUnsigned " + Long.parseUnsignedLong("9000000000000000",16));
        System.out.println("Value by literal " + 0x9000000000000000L);
    }
}
,

Long.parseLong()不会像算术一样“溢出”到负数-它不是解析位表示,而是解析整数。

以16为底的最大long7FFFFFFFFFFFFFFF;你的价值比那更大。

用于十进制比较:

Base 16            Decimal
7FFFFFFFFFFFFFFF    9,223,372,036,854,775,807
9000000000000000   10,376,293,541,461,622,784

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...