- 所有已实现的接口:
-
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 String
format
(double number) 格式的特化。abstract StringBuffer
format
(double number, StringBuffer toAppendTo, FieldPosition pos) 格式的特化。final String
format
(long number) 格式的特化。abstract StringBuffer
format
(long number, StringBuffer toAppendTo, FieldPosition pos) 格式的特化。format
(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化数字并将结果文本附加到给定的字符串缓冲区。static Locale[]
返回所有可以返回此类的get*Instance
方法的本地化实例的数组。static NumberFormat
static NumberFormat
getCompactNumberInstance
(Locale locale, NumberFormat.Style formatStyle) 返回指定locale
和formatStyle
的紧凑数字格式。格式化货币值时使用的货币。static final NumberFormat
返回当前默认FORMAT
区域设置的货币格式。static NumberFormat
getCurrencyInstance
(Locale inLocale) 返回指定区域设置的货币格式。static final NumberFormat
返回当前默认FORMAT
区域设置的通用数字格式。static NumberFormat
getInstance
(Locale inLocale) 返回指定区域设置的通用数字格式。static final NumberFormat
返回当前默认FORMAT
区域设置的整数数字格式。static NumberFormat
getIntegerInstance
(Locale inLocale) 返回指定区域设置的整数数字格式。int
返回数字的小数部分允许的最大位数。int
返回数字的整数部分允许的最大位数。int
返回数字的小数部分允许的最小位数。int
返回数字的整数部分允许的最小位数。static final NumberFormat
返回当前默认FORMAT
区域设置的通用数字格式。static NumberFormat
getNumberInstance
(Locale inLocale) 返回指定区域设置的通用数字格式。static final NumberFormat
返回当前默认FORMAT
区域设置的百分比格式。static NumberFormat
getPercentInstance
(Locale inLocale) 返回指定区域设置的百分比格式。获取此 NumberFormat 中使用的RoundingMode
。int
hashCode()
覆盖 hashCode。boolean
返回此格式中是否使用分组。boolean
返回此格式是否仅将数字解析为整数。从给定字符串的开头解析文本以生成一个数字。abstract Number
parse
(String source, ParsePosition parsePosition) 如果可能返回一个 Long(例如,在范围 [Long.MIN_VALUE, Long.MAX_VALUE] 内且没有小数),否则返回一个 Double。final Object
parseObject
(String source, ParsePosition pos) 从字符串中解析文本以生成一个Number
。void
setCurrency
(Currency currency) 在格式化货币值时设置此数字格式使用的货币。void
setGroupingUsed
(boolean newValue) 设置是否在此格式中使用分组。void
setMaximumFractionDigits
(int newValue) 设置数字的小数部分允许的最大位数。maximumFractionDigits 必须 ≥ minimumFractionDigits。void
setMaximumIntegerDigits
(int newValue) 设置数字的整数部分允许的最大位数。maximumIntegerDigits 必须 ≥ minimumIntegerDigits。void
setMinimumFractionDigits
(int newValue) 设置数字的小数部分允许的最小位数。minimumFractionDigits 必须 ≤ maximumFractionDigits。void
setMinimumIntegerDigits
(int newValue) 设置数字的整数部分允许的最小位数。minimumIntegerDigits 必须 ≤ maximumIntegerDigits。void
setParseIntegerOnly
(boolean value) 设置是否仅将数字解析为整数。void
setRoundingMode
(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
- 参见:
-