Java >> Java tutorial >  >> Tag >> java.lang

Undtagelse i trådens hoved java.lang.NumberFormatException:For inputstreng:90000000000000000 under radix 16

9000000000000000 base 16 er et positivt tal, da der ikke er noget tegn. Siden en long er underskrevet, er det største tal, den kan indeholde, 0x7FFF_FFFF_FFFF_FFFF. Så din er for stor.

Hvis du vil have -8.070.450.532.247.928.832, skal du bruge parseUnsignedLong() :

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

Output:

-8070450532247928832

Nu accepteres værdier op til 0xFFFF_FFFF_FFFF_FFFF.


Med henvisning til Long#parseLong(String,int)

En undtagelse af typen NumberFormatException udløses, hvis en af ​​følgende situationer opstår:

  • Det første argument er null eller er en streng med længden nul.
  • Radiksen er enten mindre end Character.MIN_RADIX eller større end Character.MAX_RADIX.
  • Ethvert tegn i strengen er ikke et ciffer i den angivne radix, bortset fra at det første tegn kan være et minustegn '-' ('\u002d') eller plustegn '+' ('\u002B'), forudsat at strengen er længere end længde 1.
  • Værdien repræsenteret af strengen er ikke en værdi af typen long.

Eksempler:
parseLong("0", 10) returnerer 0L
parseLong("473", 10) returnerer 473L
parseLong("+42", 10) returnerer 42L
parseLong("-0", 10) returnerer 0L
parseLong("-FF", 16) returnerer -255L
parseLong("1100110", 2) returnerer 102L
parseLong("99", 8) kaster en NumberFormatException
parseLong("Hasselnød", 10) kaster en NumberFormatException
parseLong("Hasselnød", 36) returnerer 1356099454469L

Decimalværdien parset ved hjælp af radix 16 er 10376293541461622784, hvilket er større end Long.MAX_VALUE(9223372036854775807), overtræder følgende betingelse:

Værdien repræsenteret af strengen er ikke en værdi af typen long

derfor smider 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);
    }
}

Java tag