- 所有已实现的接口:
-
Serializable,Cloneable
- 直接已知的子类:
-
ChoiceFormat,CompactNumberFormat,DecimalFormat
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);
如果区域设置包含"nu"(数字)和/或"rg"(区域覆盖)Unicode扩展,则用于格式化的小数位数和/或国家将被覆盖。如果同时指定了"nu"和"rg",则来自"nu"扩展的小数位数将取代"rg"扩展的隐式小数位数。
您还可以使用NumberFormat来解析数字:
使用myNumber = nf.parse(myString);
getInstance或getNumberInstance来获取普通数字格式。使用getIntegerInstance来获取整数数字格式。使用getCurrencyInstance来获取货币数字格式。使用getCompactNumberInstance来获取紧凑数字格式,以便以更短的形式格式化数字。例如,2000可以在US区域设置中格式化为"2K"。使用getPercentInstance来获取用于显示百分比的格式。使用这种格式,类似0.53的分数将显示为53%。
您还可以使用诸如setMinimumFractionDigits之类的方法来控制数字的显示。如果您希望对格式或解析有更多控制,或者希望为用户提供更多控制,请尝试将从工厂方法获取的NumberFormat转换为DecimalFormat或CompactNumberFormat,具体取决于所使用的工厂方法。这将适用于绝大多数区域设置;只需记得将其放在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。
您还可以使用带有ParsePosition和FieldPosition的parse和format方法的形式,以允许您:
- 逐步解析字符串的各部分
- 对齐小数点和其他区域
- 如果使用具有用于对齐的间距的等宽字体,则可以在格式调用中传递
FieldPosition,其中field=INTEGER_FIELD。在输出中,getEndIndex将设置为整数的最后一个字符和小数点之间的偏移量。在字符串的前面添加(desiredSpaceCount - getEndIndex)个空格。 - 如果使用比例字体,而不是用空格填充,可以测量从开始到
getEndIndex的字符串的像素宽度。然后在绘制文本之前将笔移动(desiredPixelWidth - widthToAlignmentPoint)。它还适用于没有小数点,但可能在末尾有其他字符的情况,例如,在负数中带有括号的情况:"(12)"表示-12。
同步
数字格式通常不是同步的。建议为每个线程创建单独的格式实例。如果多个线程同时访问格式,则必须在外部进行同步。
- 实现要求:
-
format(double, StringBuffer, FieldPosition),format(long, StringBuffer, FieldPosition)和parse(String, ParsePosition)方法可能会抛出NullPointerException,如果它们的任何参数为null。子类可以提供关于NullPointerException的自己的实现和规范。默认实现提供了在格式化数字时使用的
java.math.RoundingMode中定义的舍入模式。它使用round half-even算法。要更改舍入模式,请使用setRoundingMode。由静态工厂方法返回的NumberFormat被配置为使用半偶数舍入(参见java.math.RoundingMode.HALF_EVEN)来格式化浮点数。 - 自1.1版本起:
- 1.1
- 参见:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class定义在NumberFormat.formatToCharacterIterator返回的AttributedCharacterIterator中用作属性键的常量,以及在FieldPosition中用作字段标识符的常量。static enum数字格式样式。 -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int用于构造FieldPosition对象的字段常量。static final int用于构造FieldPosition对象的字段常量。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionclone()覆盖了Cloneable。boolean覆盖了equals。final Stringformat(double number) 格式的特化。abstract StringBufferformat(double number, StringBuffer toAppendTo, FieldPosition pos) 格式的特化。final Stringformat(long number) 格式的特化。abstract StringBufferformat(long number, StringBuffer toAppendTo, FieldPosition pos) 格式的特化。format(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化数字并将结果文本附加到给定的字符串缓冲区。static Locale[]返回所有可以返回此类的get*Instance方法的本地化实例的数组。static NumberFormatstatic NumberFormatgetCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle) 返回指定locale和formatStyle的紧凑数字格式。格式化货币值时使用的货币。static final NumberFormat返回当前默认FORMAT区域设置的货币格式。static NumberFormatgetCurrencyInstance(Locale inLocale) 返回指定区域设置的货币格式。static final NumberFormat返回当前默认FORMAT区域设置的通用数字格式。static NumberFormatgetInstance(Locale inLocale) 返回指定区域设置的通用数字格式。static final NumberFormat返回当前默认FORMAT区域设置的整数数字格式。static NumberFormatgetIntegerInstance(Locale inLocale) 返回指定区域设置的整数数字格式。int返回数字的小数部分允许的最大位数。int返回数字的整数部分允许的最大位数。int返回数字的小数部分允许的最小位数。int返回数字的整数部分允许的最小位数。static final NumberFormat返回当前默认FORMAT区域设置的通用数字格式。static NumberFormatgetNumberInstance(Locale inLocale) 返回指定区域设置的通用数字格式。static final NumberFormat返回当前默认FORMAT区域设置的百分比格式。static NumberFormatgetPercentInstance(Locale inLocale) 返回指定区域设置的百分比格式。获取此 NumberFormat 中使用的RoundingMode。inthashCode()覆盖 hashCode。boolean返回此格式中是否使用分组。boolean返回此格式是否仅将数字解析为整数。从给定字符串的开头解析文本以生成一个数字。abstract Numberparse(String source, ParsePosition parsePosition) 如果可能返回一个 Long(例如,在范围 [Long.MIN_VALUE, Long.MAX_VALUE] 内且没有小数),否则返回一个 Double。final ObjectparseObject(String source, ParsePosition pos) 从字符串中解析文本以生成一个Number。voidsetCurrency(Currency currency) 在格式化货币值时设置此数字格式使用的货币。voidsetGroupingUsed(boolean newValue) 设置是否在此格式中使用分组。voidsetMaximumFractionDigits(int newValue) 设置数字的小数部分允许的最大位数。maximumFractionDigits 必须 ≥ minimumFractionDigits。voidsetMaximumIntegerDigits(int newValue) 设置数字的整数部分允许的最大位数。maximumIntegerDigits 必须 ≥ minimumIntegerDigits。voidsetMinimumFractionDigits(int newValue) 设置数字的小数部分允许的最小位数。minimumFractionDigits 必须 ≤ maximumFractionDigits。voidsetMinimumIntegerDigits(int newValue) 设置数字的整数部分允许的最小位数。minimumIntegerDigits 必须 ≤ maximumIntegerDigits。voidsetParseIntegerOnly(boolean value) 设置是否仅将数字解析为整数。voidsetRoundingMode(RoundingMode roundingMode) 设置此 NumberFormat 中使用的RoundingMode。Methods declared in class java.text.Format
format, formatToCharacterIterator, parseObject
-
Field Details
-
INTEGER_FIELD
public static final int INTEGER_FIELD用于构造 FieldPosition 对象的字段常量。表示应返回格式化数字的整数部分的位置。- 参见:
-
FRACTION_FIELD
public static final int FRACTION_FIELD用于构造 FieldPosition 对象的字段常量。表示应返回格式化数字的小数部分的位置。- 参见:
-
-
Constructor Details
-
NumberFormat
protected NumberFormat()唯一构造函数。(通常由子类构造函数隐式调用。)
-
-
Method Details
-
format
格式化数字并将结果文本附加到给定的字符串缓冲区。该数字可以是Number的任何子类。此实现使用
Number.longValue()提取所有可以转换为long而不会丢失信息的整数类型值的值,包括具有比 64 小的位长度的BigInteger值,以及对于所有其他类型使用Number.doubleValue()。然后调用format(long,java.lang.StringBuffer,java.text.FieldPosition)或format(double,java.lang.StringBuffer,java.text.FieldPosition)。这可能导致对于BigInteger和BigDecimal值的幅度信息和精度的丢失。- 指定者:
-
format在类Format中 - 参数:
-
number- 要格式化的数字 -
toAppendTo- 要附加格式化文本的StringBuffer -
pos- 用于跟踪返回字符串中字段的位置。例如,在Locale.US区域设置中格式化数字1234567.89时,如果给定的fieldPosition是INTEGER_FIELD,则fieldPosition的开始索引和结束索引将分别设置为 0 和 9,用于输出字符串1,234,567.89。 - 返回:
-
作为
toAppendTo传递的值 - 抛出:
-
IllegalArgumentException- 如果number为 null 或不是Number的实例。 -
NullPointerException- 如果toAppendTo或pos为 null -
ArithmeticException- 如果需要舍入且舍入模式设置为 RoundingMode.UNNECESSARY - 参见:
-
parseObject
从字符串中解析文本以生成一个Number。该方法尝试从由
pos给出的索引开始解析文本。如果解析成功,则更新pos的索引为使用的最后一个字符之后的索引(解析不一定使用到字符串末尾的所有字符),并返回解析的数字。更新后的pos可用于指示下一次调用此方法的起始点。如果发生错误,则不更改pos的索引,将pos的错误索引设置为发生错误的字符的索引,并返回 null。有关数字解析的更多信息,请参阅
parse(String, ParsePosition)方法。- 指定者:
-
parseObject在类Format中 - 参数:
-
source- 应解析其中一部分的String。 -
pos- 一个ParsePosition对象,具有如上所述的索引和错误索引信息。 - 返回:
-
从字符串解析的
Number。在出现错误时返回 null。 - 抛出:
-
NullPointerException- 如果source或pos为 null。
-
format
format 的特化。- 参数:
-
number- 要格式化的双精度数 - 返回:
- 格式化后的字符串
- 抛出:
-
ArithmeticException- 如果需要舍入且舍入模式设置为 RoundingMode.UNNECESSARY - 参见:
-
format
format 的特化。- 参数:
-
number- 要格式化的长整型数 - 返回:
- 格式化后的字符串
- 抛出:
-
ArithmeticException- 如果需要舍入且舍入模式设置为 RoundingMode.UNNECESSARY - 参见:
-
format
format 的特化。- 参数:
-
number- 要格式化的双精度数 -
toAppendTo- 要附加格式化文本的 StringBuffer -
pos- 用于跟踪返回字符串中字段的位置。例如,在Locale.US区域设置中格式化数字1234567.89时,如果给定的fieldPosition是INTEGER_FIELD,则fieldPosition的开始索引和结束索引将分别设置为 0 和 9,用于输出字符串1,234,567.89。 - 返回:
- 格式化后的 StringBuffer
- 抛出:
-
ArithmeticException- 如果需要舍入且舍入模式设置为 RoundingMode.UNNECESSARY - 参见:
-
format
format 的特化。- 参数:
-
number- 要格式化的长整型数 -
toAppendTo- 要附加格式化文本的 StringBuffer -
pos- 用于跟踪返回字符串中字段的位置。例如,在Locale.US区域设置中格式化数字123456789时,如果给定的fieldPosition是INTEGER_FIELD,则fieldPosition的开始索引和结束索引将分别设置为 0 和 11,用于输出字符串123,456,789。 - 返回:
- 格式化后的 StringBuffer
- 抛出:
-
ArithmeticException- 如果需要舍入且舍入模式设置为 RoundingMode.UNNECESSARY - 参见:
-
parse
返回一个Long(如果可能的话,例如在范围[Long.MIN_VALUE,Long.MAX_VALUE]内且没有小数),否则返回一个Double。如果设置了IntegerOnly,将在小数点(或等效物)处停止(例如,对于有理数"1 2/3",将在1后停止)。不会抛出异常;如果无法解析任何对象,则索引保持不变!- 参数:
-
source- 要解析的字符串 -
parsePosition- 解析位置 - 返回:
- 解析后的值
- 另请参阅:
-
parse
从给定字符串的开头解析文本以生成一个数字。该方法可能不会使用给定字符串的整个文本。有关数字解析的更多信息,请参阅
parse(String, ParsePosition)方法。- 参数:
-
source- 应解析其开头的字符串 - 返回:
-
从字符串解析的
Number - 抛出:
-
ParseException- 如果无法解析指定字符串的开头
-
isParseIntegerOnly
public boolean isParseIntegerOnly()如果此格式仅解析数字作为整数,则返回true。例如,在英语区域设置中,如果ParseIntegerOnly为true,则字符串"1234."将被解析为整数值1234,并且解析将在"."字符处停止。当然,解析操作接受的确切格式取决于区域设置,并由NumberFormat的子类确定。- 返回:
-
如果应仅解析数字作为整数,则返回
true;否则返回false
-
setParseIntegerOnly
public void setParseIntegerOnly(boolean value) 设置是否仅应解析数字作为整数。- 参数:
-
value- 如果应仅解析数字作为整数,则为true;否则为false - 另请参阅:
-
getInstance
返回当前默认FORMAT区域设置的通用数字格式。这等同于调用getNumberInstance()。- 返回:
-
用于通用数字格式的
NumberFormat实例
-
getInstance
返回指定区域设置的通用数字格式。这等同于调用getNumberInstance(inLocale)。- 参数:
-
inLocale- 所需的区域设置 - 返回:
-
用于通用数字格式的
NumberFormat实例
-
getNumberInstance
返回当前默认FORMAT区域设置的通用数字格式。这相当于调用
getNumberInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
-
用于通用数字格式的
NumberFormat实例 - 另请参阅:
-
getNumberInstance
返回指定区域设置的通用数字格式。- 参数:
-
inLocale- 所需的区域设置 - 返回:
-
用于通用数字格式的
NumberFormat实例
-
getIntegerInstance
返回当前默认FORMAT区域设置的整数数字格式。返回的数字格式配置为使用半偶数舍入(参见RoundingMode.HALF_EVEN)将浮点数四舍五入到最接近的整数,用于格式化,并且仅解析输入字符串的整数部分(参见isParseIntegerOnly)。这相当于调用
getIntegerInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
- 用于整数值的数字格式
- 自:
- 1.4
- 另请参阅:
-
getIntegerInstance
返回指定区域设置的整数数字格式。返回的数字格式配置为使用半偶数舍入(参见RoundingMode.HALF_EVEN)将浮点数四舍五入到最接近的整数,用于格式化,并且仅解析输入字符串的整数部分(参见isParseIntegerOnly)。- 参数:
-
inLocale- 所需的区域设置 - 返回:
- 用于整数值的数字格式
- 自:
- 1.4
- 另请参阅:
-
getCurrencyInstance
返回当前默认FORMAT区域设置的货币格式。这相当于调用
getCurrencyInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
-
用于货币格式的
NumberFormat实例 - 另请参阅:
-
getCurrencyInstance
返回指定区域设置的货币格式。如果指定的区域设置包含"
cf"(货币格式样式)Unicode扩展,则返回的货币格式将使用该样式(如果可用)。否则,该样式使用默认的"standard"货币格式。例如,如果样式指定为"account",则在某些区域设置中,负货币金额使用一对括号。- 参数:
-
inLocale- 所需的区域设置 - 返回:
-
用于货币格式的
NumberFormat实例 - 外部规范
-
getPercentInstance
返回当前默认FORMAT区域设置的百分比格式。这相当于调用
getPercentInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
-
用于百分比格式的
NumberFormat实例 - 另请参阅:
-
getPercentInstance
返回指定区域设置的百分比格式。- 参数:
-
inLocale- 所需的区域设置 - 返回:
-
用于百分比格式的
NumberFormat实例
-
getCompactNumberInstance
返回默认FORMAT区域设置的紧凑数字格式,使用"SHORT"格式样式。- 返回:
-
用于紧凑数字格式的
NumberFormat实例 - 自:
- 12
- 另请参阅:
-
getCompactNumberInstance
返回指定locale和formatStyle的紧凑数字格式。- 参数:
-
locale- 所需的区域设置 -
formatStyle- 格式化数字的样式 - 返回:
-
用于紧凑数字格式的
NumberFormat实例 - 抛出:
-
NullPointerException- 如果locale或formatStyle为null - 自:
- 12
- 另请参阅:
-
getAvailableLocales
返回此类的get*Instance方法可以返回本地化实例的所有区域设置数组。返回的数组表示Java运行时支持的区域设置和已安装的NumberFormatProvider实现的联合。返回的数组至少必须包含等于Locale.ROOT和等于Locale.US的Locale实例。- 返回:
-
可用于本地化
NumberFormat实例的区域设置数组。
-
hashCode
public int hashCode()覆盖hashCode。 -
equals
覆盖equals。 -
clone
覆盖Cloneable。 -
isGroupingUsed
public boolean isGroupingUsed()返回此格式中是否使用分组。例如,在英文区域设置中,启用分组后,数字1234567可能被格式化为"1,234,567"。分组分隔符以及每个组的大小是与区域设置相关的,并由NumberFormat的子类确定。- 返回:
-
如果使用分组,则返回
true; 否则返回false - 另请参见:
-
setGroupingUsed
public void setGroupingUsed(boolean newValue) 设置此格式中是否使用分组。- 参数:
-
newValue- 如果使用分组,则为true; 否则为false - 另请参见:
-
getMaximumIntegerDigits
public int getMaximumIntegerDigits()返回数字整数部分中允许的最大数字位数。- 返回:
- 最大数字位数
- 另请参见:
-
setMaximumIntegerDigits
public void setMaximumIntegerDigits(int newValue) 设置数字整数部分中允许的最大数字位数。maximumIntegerDigits必须≥minimumIntegerDigits。如果maximumIntegerDigits的新值小于当前的minimumIntegerDigits值,则minimumIntegerDigits也将设置为新值。- 参数:
-
newValue- 要显示的整数位数的最大数字; 如果小于零,则使用零。具体的子类可以强制执行适合被格式化的数字类型的此值的上限。 - 另请参见:
-
getMinimumIntegerDigits
public int getMinimumIntegerDigits()返回数字整数部分中允许的最小数字位数。- 返回:
- 最小数字位数
- 另请参见:
-
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue) 设置数字整数部分中允许的最小数字位数。minimumIntegerDigits必须≤maximumIntegerDigits。如果minimumIntegerDigits的新值超过当前的maximumIntegerDigits值,则maximumIntegerDigits也将设置为新值。- 参数:
-
newValue- 要显示的整数位数的最小数字; 如果小于零,则使用零。具体的子类可以强制执行适合被格式化的数字类型的此值的上限。 - 另请参见:
-
getMaximumFractionDigits
public int getMaximumFractionDigits()返回数字小数部分中允许的最大数字位数。- 返回:
- 最大数字位数。
- 另请参见:
-
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue) 设置数字小数部分中允许的最大数字位数。maximumFractionDigits必须≥minimumFractionDigits。如果maximumFractionDigits的新值小于当前的minimumFractionDigits值,则minimumFractionDigits也将设置为新值。- 参数:
-
newValue- 要显示的小数位数的最大数字; 如果小于零,则使用零。具体的子类可以强制执行适合被格式化的数字类型的此值的上限。 - 另请参见:
-
getMinimumFractionDigits
public int getMinimumFractionDigits()返回数字小数部分中允许的最小数字位数。- 返回:
- 最小数字位数
- 另请参见:
-
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue) 设置数字小数部分中允许的最小数字位数。minimumFractionDigits必须≤maximumFractionDigits。如果minimumFractionDigits的新值超过当前的maximumFractionDigits值,则maximumFractionDigits也将设置为新值。- 参数:
-
newValue- 要显示的小数位数的最小数字; 如果小于零,则使用零。具体的子类可以强制执行适合被格式化的数字类型的此值的上限。 - 另请参见:
-
getCurrency
获取此数字格式在格式化货币值时使用的货币。初始值以区域设置相关的方式派生。如果无法确定有效货币并且未使用setCurrency设置货币,则返回值可能为null。默认实现会抛出
UnsupportedOperationException。- 返回:
-
此数字格式使用的货币,或
null - 抛出:
-
UnsupportedOperationException- 如果数字格式类不实现货币格式化 - 自:
- 1.4
-
setCurrency
设置此数字格式在格式化货币值时使用的货币。这不会更新数字格式使用的最小或最大小数位数。默认实现会抛出
UnsupportedOperationException。- 参数:
-
currency- 要由此数字格式使用的新货币 - 抛出:
-
UnsupportedOperationException- 如果数字格式类不实现货币格式化 -
NullPointerException- 如果currency为null - 自:
- 1.4
-
getRoundingMode
获取此NumberFormat中使用的RoundingMode。NumberFormat中此方法的默认实现始终会抛出UnsupportedOperationException。处理不同舍入模式的子类应该重写此方法。- 返回:
-
用于此NumberFormat的
RoundingMode。 - 抛出:
-
UnsupportedOperationException- 默认实现始终会抛出此异常 - 自:
- 1.6
- 另请参见:
-
setRoundingMode
设置此NumberFormat中使用的RoundingMode。NumberFormat中此方法的默认实现始终会抛出UnsupportedOperationException。处理不同舍入模式的子类应该重写此方法。- 参数:
-
roundingMode- 要使用的RoundingMode - 抛出:
-
UnsupportedOperationException- 默认实现始终抛出此异常 -
NullPointerException- 如果roundingMode为null - 自从:
- 1.6
- 参见:
-