Module  java.base
软件包  java.text

Class NumberFormat

  • All Implemented Interfaces:
    SerializableCloneable
    已知直接子类:
    ChoiceFormatDecimalFormat


    public abstract class NumberFormat
    extends Format
    NumberFormat是所有数字格式的抽象基类。 该类提供格式化和解析数字的接口。 NumberFormat还提供了确定哪些区域设置具有数字格式以及它们的名称的方法。

    NumberFormat可帮助您格式化和解析任何区域设置的数字。 您的代码可以完全独立于小数点,数千分隔符或甚至使用的特定十进制数字的区域设置约定,或者数字格式是否为偶数十进制。

    要格式化当前语言环境的数字,请使用其中一种工厂类方法:

    
     myString = NumberFormat.getInstance().format(myNumber);
     
    如果要格式化多个数字,更多的是获取格式并多次使用它,以便系统不必多次获取有关本地语言和国家/地区约定的信息。
    
     NumberFormat nf = NumberFormat.getInstance();
     for (int i = 0; i < myNumber.length; ++i) {
         output.println(nf.format(myNumber[i]) + "; ");
     }
     
    要格式化不同语言环境的数字,请在调用getInstance指定它。
    
     NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
     
    您也可以使用NumberFormat来解析数字:
    
     myNumber = nf.parse(myString);
     
    使用getInstancegetNumberInstance获取正常数字格式。 使用getIntegerInstance获取整数格式。 使用getCurrencyInstance获取货币编号格式。 并使用getPercentInstance获取显示百分比的格式。 使用这种格式,0.53的分数显示为53%。

    您还可以使用setMinimumFractionDigits等方法控制数字的显示。 如果你想在格式或对其进行解析更大的控制权,或者希望给用户更多的控制,你可以尝试铸造NumberFormat你从工厂方法到获得DecimalFormat 这对绝大多数地方都有用; 只要记住把它放在一个try块中,以防万一遇到不寻常的一个。

    NumberFormat和DecimalFormat被设计为使得某些控件可以用于格式化,而其他控件可用于解析。 以下是每种这些控制方法的详细说明,

    setParseIntegerOnly:仅影响解析,例如如果为true,则为“3456.78”→3456(并且在索引6之后留下解析位置)如果为false,则为“3456.78”→3456.78(并且在索引8之后留下解析位置)是独立的格式化。 如果您不想显示小数点后可能没有数字的小数点,请使用setDecimalSeparatorAlwaysShown。

    setDecimalSeparatorAlwaysShown:仅影响格式化,只有在小数点之后可能没有数字的地方,例如像“#,## 0。##”这样的模式,例如,如果为true,则为3456.00†“”3,456“。 如果是false,3456.00↓”3456“这是独立于解析。 如果要解析在小数点停止,请使用setParseIntegerOnly。

    您还可以使用parseformat方法的形式,其中包含ParsePositionFieldPosition以允许您:

    • 逐渐解析一串字符串
    • 对齐小数点和其他区域
    例如,您可以通过两种方式对齐数字:
    1. 如果您使用的间距排列等宽字体,你可以通过FieldPosition在您的格式的呼叫,与field = INTEGER_FIELD 在输出时, getEndIndex将被设置为整数的最后一个字符与小数点之间的偏移量。 在字符串前面添加(desiredSpaceCount - getEndIndex)空格。
    2. 如果您使用比例字体,而不是使用空格填充,请测量从起始到getEndIndex的字符串宽度(以像素为getEndIndex 然后在绘制文本之前将笔移动(desiredPixelWidth - widthToAlignmentPoint)。 它也可以在没有十进制的情况下工作,但最后可能有其他字符,例如括号为负数:“(12)”表示-12。

    Synchronization

    数字格式通常不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。

    实现要求:
    format(double, StringBuffer, FieldPosition)format(long, StringBuffer, FieldPosition)parse(String, ParsePosition)方法可能抛出NullPointerException ,如果他们的任何参数为null 子类可以提供自己的实现和规范约NullPointerException
    从以下版本开始:
    1.1
    另请参见:
    DecimalFormatChoiceFormatSerialized Form
    • 字段详细信息

      • INTEGER_FIELD

        public static final int INTEGER_FIELD
        用于构造FieldPosition对象的字段常量。 表示应该返回格式化数字的整数部分的位置。
        另请参见:
        FieldPositionConstant Field Values
      • FRACTION_FIELD

        public static final int FRACTION_FIELD
        用于构造FieldPosition对象的字段常量。 表示应该返回格式化数字的分数部分的位置。
        另请参见:
        FieldPositionConstant Field Values
    • 构造方法详细信息

      • NumberFormat

        protected NumberFormat​()
        唯一的构造函数。 (用于子类构造函数的调用,通常是隐式的。)
    • 方法详细信息

      • parseObject

        public final Object parseObject​(String source,
                                        ParsePosition pos)
        从字符串中解析文本,产生一个Number

        该方法尝试从pos给出的索引开始解析文本。 如果解析成功,那么pos的索引将在使用最后一个字符后更新为索引(解析不一定使用字符串末尾的所有字符),并返回解析的数字。 更新的pos可用于指示下一次调用此方法的起始点。 如果发生错误,则pos的索引不改变,则将错误索引pos设置为发生错误的字符的索引,返回null。

        有关数字解析的更多信息,请参阅parse(String, ParsePosition)方法。

        Specified by:
        parseObject在类 Format
        参数
        source - A String ,其中的一部分应该被解析。
        pos索引和错误索引信息的 pos - A ParsePosition对象。
        结果
        A Number从字符串解析。 万一出错,返回null。
        异常
        NullPointerException - 如果 sourcepos为空。
      • format

        public final String format​(double number)
        专业化格式。
        参数
        number - 双数格式
        结果
        格式化的字符串
        异常
        ArithmeticException - 如果舍入模式设置为RoundingMode.UNNECESSARY,则需要舍入
        另请参见:
        Format.format(java.lang.Object)
      • format

        public final String format​(long number)
        专业化格式。
        参数
        number - 长编号格式
        结果
        格式化的字符串
        异常
        ArithmeticException - 如果舍入方式设置为RoundingMode.UNNECESSARY,则需要舍入
        另请参见:
        Format.format(java.lang.Object)
      • parse

        public abstract Number parse​(String source,
                                     ParsePosition parsePosition)
        如果可能,返回长(例如,在[Long.MIN_VALUE,Long.MAX_VALUE]范围内,无小数),否则为Double。 如果IntegerOnly被设置,将在小数点(或等效的位置)停止;例如,对于有理数字“1 2/3”,将在1)之后停止。 不抛出异常; 如果没有对象可以解析,索引没有变化!
        参数
        source - 要解析的字符串
        parsePosition - 解析位置
        结果
        被解析的价值
        另请参见:
        isParseIntegerOnly()Format.parseObject(java.lang.String, java.text.ParsePosition)
      • parse

        public Number parse​(String source)
                     throws ParseException
        从给定字符串的开头解析文本以产生一个数字。 该方法可能不会使用给定字符串的整个文本。

        有关数字解析的更多信息,请参阅parse(String, ParsePosition)方法。

        参数
        source - A String其开头应该被解析。
        结果
        A Number从字符串中解析。
        异常
        ParseException - 如果指定字符串的开头不能被解析。
      • isParseIntegerOnly

        public boolean isParseIntegerOnly​()
        如果此格式将仅将数字解析为整数,则返回true。 例如在英语语言环境中,使用ParseIntegerOnly true,字符串“1234”。 将被解析为整数值1234,解析将停止在“”。 字符。 当然,解析操作接受的确切格式是区域设置依赖,并由NumberFormat的子类决定。
        结果
        true如果数字只能解析为整数; 否则为false
      • setParseIntegerOnly

        public void setParseIntegerOnly​(boolean value)
        设置是否仅将数字解析为整数。
        参数
        value - true如果数字只能解析为整数; 否则为false
        另请参见:
        isParseIntegerOnly()
      • getInstance

        public static final NumberFormat getInstance​()
        返回当前默认的FORMAT区域设置的通用数字格式。 这与拨打getNumberInstance()相同。
        结果
        用于通用数字格式化的 NumberFormat实例
      • getInstance

        public static NumberFormat getInstance​(Locale inLocale)
        返回指定区域设置的通用数字格式。 这与调用getNumberInstance(inLocale)相同。
        参数
        inLocale - 所需的语言环境
        结果
        用于通用数字格式化的 NumberFormat实例
      • getNumberInstance

        public static NumberFormat getNumberInstance​(Locale inLocale)
        返回指定区域设置的通用数字格式。
        参数
        inLocale - 所需的语言环境
        结果
        用于通用数字格式化的 NumberFormat实例
      • getIntegerInstance

        public static NumberFormat getIntegerInstance​(Locale inLocale)
        返回指定区域设置的整数格式。 返回的数字格式被配置成使用半甚至舍入圆浮点数到最接近的整数(参见RoundingMode.HALF_EVEN )进行格式化,并且解析仅一个输入字符串的整数部分(参见isParseIntegerOnly )。
        参数
        inLocale - 所需的语言环境
        结果
        整数值的数字格式
        从以下版本开始:
        1.4
        另请参见:
        getRoundingMode()
      • getCurrencyInstance

        public static NumberFormat getCurrencyInstance​(Locale inLocale)
        返回指定区域设置的货币格式。
        参数
        inLocale - 所需的语言环境
        结果
        货币格式化的 NumberFormat实例
      • getPercentInstance

        public static NumberFormat getPercentInstance​(Locale inLocale)
        返回指定区域设置的百分比格式。
        参数
        inLocale - 所需的语言环境
        结果
        用于百分比格式化的 NumberFormat实例
      • getAvailableLocales

        public static Locale[] getAvailableLocales​()
        返回一个所有语言环境的数组,该类的get*Instance方法可以返回本地化实例。 返回的数组表示由Java运行时支持的语言环境和已安装的NumberFormatProvider实现的联合。 它必须包含至少一个Locale实例,等于Locale.US
        结果
        一组可用于本地化的本地化的区域设置 NumberFormat
      • equals

        public boolean equals​(Object obj)
        覆盖等于。
        重写:
        equals在类 Object
        参数
        obj - 与之比较的参考对象。
        结果
        true如果此对象与obj参数相同; 否则为false
        另请参见:
        Object.hashCode()HashMap
      • clone

        public Object clone​()
        覆盖可克隆。
        重写:
        clone在类 Format
        结果
        这个实例的一个克隆。
        另请参见:
        Cloneable
      • isGroupingUsed

        public boolean isGroupingUsed​()
        新新新旗新新新新旗新新旗新新旗新新旗旗新新旗新新旗旗新新旗新旗旗 例如,在英文区域设置中,通过分组,数字1234567可能被格式化为“1,234,567”。 分组分隔符以及每个组的大小取决于区域设置,并由NumberFormat的子类决定。
        结果
        true如果使用分组; false否则
        另请参见:
        setGroupingUsed(boolean)
      • setGroupingUsed

        public void setGroupingUsed​(boolean newValue)
        设置是否以此格式使用分组。
        参数
        newValue - true如果使用分组; 否则为false
        另请参见:
        isGroupingUsed()
      • getMaximumIntegerDigits

        public int getMaximumIntegerDigits​()
        返回数字整数部分允许的最大位数。
        结果
        最大位数
        另请参见:
        setMaximumIntegerDigits(int)
      • setMaximumIntegerDigits

        public void setMaximumIntegerDigits​(int newValue)
        设置数字的整数部分允许的最大位数。 maximumIntegerDigits必须为≤最小值。 如果maximumIntegerDigits的新值小于minimumIntegerDigits的当前值,那么minimumIntegerDigits也将被设置为新值。
        参数
        newValue - 要显示的最大整数位数; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
        另请参见:
        getMaximumIntegerDigits()
      • getMinimumIntegerDigits

        public int getMinimumIntegerDigits​()
        返回数字整数部分允许的最小位数。
        结果
        最小位数
        另请参见:
        setMinimumIntegerDigits(int)
      • setMinimumIntegerDigits

        public void setMinimumIntegerDigits​(int newValue)
        设置数字的整数部分允许的最小位数。 minimumIntegerDigits必须是最大值。 如果minimumIntegerDigits的新值超过当前的maximumIntegerDigits值,那么maximumIntegerDigits也将被设置为新的值
        参数
        newValue - 要显示的最小整数数字; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
        另请参见:
        getMinimumIntegerDigits()
      • getMaximumFractionDigits

        public int getMaximumFractionDigits​()
        返回数字小数部分允许的最大位数。
        结果
        最大位数。
        另请参见:
        setMaximumFractionDigits(int)
      • setMaximumFractionDigits

        public void setMaximumFractionDigits​(int newValue)
        设置数字小数部分允许的最大位数。 maximumFractionDigits必须为〜最小FractionDigits。 如果maximumFractionDigits的新值小于minimumFractionDigits的当前值,那么minimumFractionDigits也将被设置为新值。
        参数
        newValue - 要显示的最小数字位数; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
        另请参见:
        getMaximumFractionDigits()
      • getMinimumFractionDigits

        public int getMinimumFractionDigits​()
        返回数字小数部分允许的最小位数。
        结果
        最小位数
        另请参见:
        setMinimumFractionDigits(int)
      • setMinimumFractionDigits

        public void setMinimumFractionDigits​(int newValue)
        设置数字小数部分允许的最小位数。 minimumFractionDigits必须是最大值。 如果minimumFractionDigits的新值超过了currentFractionDigits的当前值,那么maximumIntegerDigits也将被设置为新的值
        参数
        newValue - 要显示的最小数字数字; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
        另请参见:
        getMinimumFractionDigits()
      • getCurrency

        public Currency getCurrency​()
        在格式化货币值时,获取此数字格式使用的货币。 初始值以区域设置依赖的方式导出。 如果无法确定有效货币,并且使用setCurrency未设定货币,则返回值可能为null。

        默认实现抛出UnsupportedOperationException

        结果
        该数字格式使用的货币,或 null
        异常
        UnsupportedOperationException - 如果数字格式类不实现货币格式
        从以下版本开始:
        1.4
      • setCurrency

        public void setCurrency​(Currency currency)
        设置格式化货币值时此数字格式使用的货币。 这不会更新数字格式使用的小数位数的最小或最大数量。

        默认实现抛出UnsupportedOperationException

        参数
        currency - 此数字格式使用的新货币
        异常
        UnsupportedOperationException - 如果数字格式类不实现货币格式化
        NullPointerException - 如果 currency为空
        从以下版本开始:
        1.4