Class NumberParser

java.lang.Object
org.miaixz.bus.core.math.NumberParser

public class NumberParser extends Object
数字解析器 用于将字符串解析为对应的数字类型,支持包括:
  • 0开头的忽略开头的0
  • 空串返回0
  • NaN返回0
  • 其它情况按照10进制转换
  • .123形式返回0.123(按照小于0的小数对待)

构造时可选是否将NaN转为0,默认为true。 参考:https://stackoverflow.com/questions/5876369/why-does-casting-double-nan-to-int-not-throw-an-exception-in-java

Since:
Java 17+
Author:
Kimi Liu
  • Field Details

    • INSTANCE

      public static final NumberParser INSTANCE
      单例
  • Constructor Details

    • NumberParser

      public NumberParser(Locale locale, boolean zeroIfNaN)
      构造
      Parameters:
      locale - 地域,null表示默认本地
      zeroIfNaN - 如果用户传入NaN,是否转为0,如果为false,则抛出NumberFormatException
  • Method Details

    • of

      public static NumberParser of(Locale locale)
      构建NumberParser
      Parameters:
      locale - 地域,null表示默认本地
      Returns:
      NumberParser
    • of

      public static NumberParser of(Locale locale, boolean zeroIfNaN)
      构建NumberParser
      Parameters:
      locale - 地域,null表示默认本地
      zeroIfNaN - 如果用户传入NaN,是否转为0,如果为false,则抛出NumberFormatException
      Returns:
      NumberParser
    • parseInt

      public int parseInt(String numberStr) throws NumberFormatException
      解析转换数字字符串为int型数字,规则如下:
       1、0x开头的视为16进制数字
       2、0开头的忽略开头的0
       3、其它情况按照10进制转换
       4、空串返回0
       5、.123形式返回0(按照小于0的小数对待)
       6、123.56截取小数点之前的数字,忽略小数部分
       7、科学计数法抛出NumberFormatException异常
       
      Parameters:
      numberStr - 数字字符串
      Returns:
      the int
      Throws:
      NumberFormatException - 数字格式异常
    • parseLong

      public long parseLong(String numberStr)
      解析转换数字字符串为long型数字,规则如下:
       1、0x开头的视为16进制数字
       2、0开头的忽略开头的0
       3、空串返回0
       4、其它情况按照10进制转换
       5、.123形式返回0(按照小于0的小数对待)
       6、123.56截取小数点之前的数字,忽略小数部分
       
      Parameters:
      numberStr - 数字字符串
      Returns:
      the long
    • parseFloat

      public float parseFloat(String numberStr)
      解析转换数字字符串为long型数字,规则如下:
       1、0开头的忽略开头的0
       2、空串返回0
       3、其它情况按照10进制转换
       4、.123形式返回0.123(按照小于0的小数对待)
       
      Parameters:
      numberStr - 数字字符串
      Returns:
      the long
    • parseDouble

      public double parseDouble(String numberStr)
      解析转换数字字符串为long型数字,规则如下:
       1、0开头的忽略开头的0
       2、空串返回0
       3、其它情况按照10进制转换
       4、.123形式返回0.123(按照小于0的小数对待)
       5、NaN返回0
       
      Parameters:
      numberStr - 数字字符串
      Returns:
      the double
    • parseBigInteger

      public BigInteger parseBigInteger(String text)
      解析为BigInteger,支持16进制、10进制和8进制,如果传入空白串返回null
      Parameters:
      text - 数字字符串
      Returns:
      BigInteger
    • parseNumber

      public Number parseNumber(String numberStr) throws NumberFormatException
      将指定字符串转换为Number 对象 此方法不支持科学计数法
      • 空白符和NaN转换为0
      • 0x开头使用16进制解析为Long类型

      需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。

      Parameters:
      numberStr - 数字字符串
      Returns:
      Number对象
      Throws:
      NumberFormatException - 包装了ParseException,当给定的数字字符串无法解析时抛出