- 所有已实现的接口:
Serializable
,Cloneable
CompactNumberFormat
是 NumberFormat
的具体子类,它以紧凑形式格式化十进制数。紧凑的数字格式化是为空间有限的环境而设计的,格式化后的字符串可以在有限的空间中显示。它由 紧凑的数字格式 的 LDML 规范定义。紧凑的数字格式是指根据为给定区域设置提供的模式,以较短的形式表示数字。
例如:
在 US locale
中,1000
可以格式化为 "1K"
,1000000
可以格式化为 "1M"
,具体取决于使用的 style。
在 "hi_IN"
locale中,1000
可以格式化为“1 हज़ार”,50000000
可以格式化为“5 क.”,具体取决于使用的 style。
要获取区域设置的 CompactNumberFormat
,请使用 NumberFormat
提供的工厂方法之一进行紧凑的数字格式化。例如,NumberFormat.getCompactNumberInstance(Locale, Style)
。
NumberFormat fmt = NumberFormat.getCompactNumberInstance( Locale.forLanguageTag("hi-IN"), NumberFormat.Style.SHORT); String result = fmt.format(1000);
Style
可以将数字格式化为具有两种不同样式的紧凑形式,SHORT
和 LONG
。使用 NumberFormat.getCompactNumberInstance(Locale, Style)
以 SHORT
或 LONG
紧凑形式格式化和解析数字,其中给定的 Style
参数请求所需的格式。 SHORT
样式的紧凑型数字实例,采用 US locale
格式,10000
为 "10K"
。但是,相同locale中的 LONG
样式实例会将 10000
格式设置为 "10 thousand"
。
紧凑的数字模式
紧凑的数字模式以一系列模式表示,其中每个模式用于格式化一系列数字。 US locale
的 SHORT
样式紧凑数字模式的示例是 {"", "", "", "0K", "00K", "000K", "0M", "00M", "000M", "0B", "00B", "000B", "0T", "00T", "000T"}
,范围从 10
0
到10
14
.可以有任意数量的模式,它们严格基于从 10
范围开始的索引0
.例如,在上述模式中,索引 3 处的模式 ("0K"
) 用于格式化 number >= 1000 and number < 10000
,索引 4 处的模式 ("00K"
) 用于格式化 number >= 10000 and number < 100000
,依此类推。在大多数locale中,模式的范围为 10
0
-10
2
是空字符串,隐式表示特殊模式 "0"
。特殊模式 "0"
用于任何不包含紧凑模式的范围。这种特殊模式可以针对任何特定范围显式出现,或者被视为空字符串的默认模式。
紧凑模式包含由子模式边界字符 ';' (U+003B)
分隔的正负子模式,例如 "0K;-0K"
。每个子模式都有一个前缀、最小整数位数和后缀。负子模式是可选的,如果不存在,则使用以减号('-' U+002D HYPHEN-MINUS
)为前缀的正子模式作为负子模式。也就是说,单独的 "0K"
相当于 "0K;-0K"
。如果存在显式否定子模式,则它仅用于指定否定前缀和后缀。最小整数位数等特征均与正模式相同。这意味着 "0K;-00K"
产生与 "0K;-0K"
完全相同的行为。
紧凑模式中的许多字符都是按字面意思获取的,它们在解析期间匹配,在格式化期间输出不变。另一方面,特殊字符 代表其他字符、字符串或字符类。如果它们要作为文字出现在前缀或后缀中,则必须使用单引号 ' (U+0027)
引用它们,除非另有说明。例如,0क'.'。
复数
如果某些本地化要求复数形式的紧凑数字模式不同,则可以在一对大括号 '{' (U+007B)
和 '}' (U+007D)
中枚举每个单数和复数模式,用空格 ' ' (U+0020)
分隔。如果使用此格式,则每个模式都需要以其 count
开头,后跟一个冒号 ':' (U+003A)
。如果模式按字面意思包含空格,则必须将它们加引号。
例如,在德语locale中表示百万的紧凑数字模式可以指定为 "{one:0' 'Million other:0' 'Millionen}"
。 count
遵循 LDML 的 语言复数规则 。
紧凑模式具有以下语法:
Pattern: SimplePattern '{' PluralPattern [' ' PluralPattern]optional '}' SimplePattern: PositivePattern PositivePattern [; NegativePattern]optional PluralPattern: Count:SimplePattern Count: "zero" / "one" / "two" / "few" / "many" / "other" PositivePattern: Prefixoptional MinimumInteger Suffixoptional NegativePattern: Prefixoptional MinimumInteger Suffixoptional Prefix: Any Unicode characters exceptU+FFFE
,U+FFFF
, and special characters. Suffix: Any Unicode characters exceptU+FFFE
,U+FFFF
, and special characters. MinimumInteger: 0 0 MinimumInteger
格式化
默认格式化行为返回一个没有小数位的格式化字符串,但是用户可以使用setMinimumFractionDigits(int)
方法来包含小数部分。数字 1000.0
或 1000
的格式为 "1K"
而不是 "1.00K"
(在 US locale
中)。因此,为格式化提供的模式仅包含最小整数数字、前缀和/或后缀,但不包含小数部分。例如,使用的模式是 {"", "", "", 0K, 00K, ...}
。如果选择用于格式化数字的模式是 "0"
(特殊模式),无论是显式还是默认,则使用 DecimalFormat
为指定区域设置提供的通用数字格式。
解析
在使用setGroupingUsed(boolean)
将 grouping used 设置为 true
之前,默认解析行为不允许使用分组分隔符。小数部分的解析取决于 isParseIntegerOnly()
。例如,如果仅解析整数设置为 true,则跳过小数部分。
四舍五入
CompactNumberFormat
提供在 RoundingMode
中定义的舍入模式用于格式化。默认情况下,它使用 RoundingMode.HALF_EVEN
。
- 自从:
- 12
- 参见:
-
内部类总结
在类 java.text.NumberFormat 中声明的嵌套类/接口
NumberFormat.Field, NumberFormat.Style
-
字段摘要
在类 java.text.NumberFormat 中声明的字段
FRACTION_FIELD, INTEGER_FIELD
-
构造方法总结
构造方法构造方法描述CompactNumberFormat
(String decimalPattern, DecimalFormatSymbols symbols, String[] compactPatterns) 使用给定的十进制模式、十进制格式符号和紧凑模式创建CompactNumberFormat
。CompactNumberFormat
(String decimalPattern, DecimalFormatSymbols symbols, String[] compactPatterns, String pluralRules) 使用给定的十进制模式、十进制格式符号、紧凑模式和复数规则创建一个CompactNumberFormat
。 -
方法总结
修饰符和类型方法描述clone()
创建并返回此CompactNumberFormat
实例的副本。boolean
检查此CompactNumberFormat
是否等于指定的obj
。format
(double number, StringBuffer result, FieldPosition fieldPosition) 格式化 double 以生成表示其紧凑形式的字符串。format
(long number, StringBuffer result, FieldPosition fieldPosition) 格式化 long 以生成表示其紧凑形式的字符串。final StringBuffer
format
(Object number, StringBuffer toAppendTo, FieldPosition fieldPosition) 格式化数字以生成表示其紧凑形式的字符串。格式化生成AttributedCharacterIterator
的对象。int
返回分组大小。获取在此CompactNumberFormat
中使用的RoundingMode
。int
hashCode()
返回此CompactNumberFormat
实例的哈希码。boolean
如果以这种格式使用分组,则返回 true。boolean
返回parse(String, ParsePosition)
方法是否返回BigDecimal
。boolean
如果此格式仅解析紧凑数字的数字部分中的整数,则返回 true。parse
(String text, ParsePosition pos) 解析字符串中的紧凑数字以生成Number
。void
setGroupingSize
(int newValue) 设置分组大小。void
setGroupingUsed
(boolean newValue) 设置是否以这种格式使用分组。void
setMaximumFractionDigits
(int newValue) 设置数字的小数部分允许的最大位数。void
setMaximumIntegerDigits
(int newValue) 设置数字的整数部分中允许的最大位数。void
setMinimumFractionDigits
(int newValue) 设置数字的小数部分允许的最小位数。void
setMinimumIntegerDigits
(int newValue) 设置数字的整数部分中允许的最小位数。void
setParseBigDecimal
(boolean newValue) 设置parse(String, ParsePosition)
方法是否返回BigDecimal
。void
setParseIntegerOnly
(boolean value) 设置此格式是否仅解析紧凑数字的数字部分中的整数。void
setRoundingMode
(RoundingMode roundingMode) 设置在此CompactNumberFormat
中使用的RoundingMode
。在类 java.text.NumberFormat 中声明的方法
format, format, getAvailableLocales, getCompactNumberInstance, getCompactNumberInstance, getCurrency, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getMaximumFractionDigits, getMaximumIntegerDigits, getMinimumFractionDigits, getMinimumIntegerDigits, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, parse, parseObject, setCurrency
在类 java.text.Format 中声明的方法
format, parseObject
-
构造方法详细信息
-
CompactNumberFormat
public CompactNumberFormat(String decimalPattern, DecimalFormatSymbols symbols, String [] compactPatterns) 使用给定的十进制模式、十进制格式符号和紧凑模式创建CompactNumberFormat
。要使用Locale
和Style
的标准紧凑模式获取CompactNumberFormat
的实例,建议使用NumberFormat
提供的工厂方法进行紧凑数字格式化。例如,NumberFormat.getCompactNumberInstance(Locale, Style)
。- 参数:
decimalPattern
- 通用数字格式的十进制模式symbols
- 要使用的符号集compactPatterns
- 紧凑的数字模式 的数组- 抛出:
NullPointerException
- 如果任何给定参数是null
IllegalArgumentException
- 如果给定的decimalPattern
或compactPatterns
数组包含无效模式,或者如果null
出现在紧凑模式数组中- 参见:
-
CompactNumberFormat
public CompactNumberFormat(String decimalPattern, DecimalFormatSymbols symbols, String [] compactPatterns, String pluralRules) 使用给定的十进制模式、十进制格式符号、紧凑模式和复数规则创建一个CompactNumberFormat
。要使用Locale
、Style
和pluralRules
的标准紧凑模式获取CompactNumberFormat
的实例,建议使用NumberFormat
提供的工厂方法进行紧凑数字格式化。例如,NumberFormat.getCompactNumberInstance(Locale, Style)
。- 参数:
decimalPattern
- 通用数字格式的十进制模式symbols
- 要使用的符号集compactPatterns
- 紧凑的数字模式 的数组pluralRules
- 一个字符串,指定与Count
关键字(例如“one
”)和实际整数相关联的复数规则。它的语法在 Unicode Consortium 的 复数规则语法 中定义- 抛出:
NullPointerException
- 如果任何给定参数是null
IllegalArgumentException
- 如果给定的decimalPattern
,compactPatterns
数组包含无效模式,null
出现在紧凑模式数组中,或者如果给定的pluralRules
包含无效语法- 自从:
- 14
- 参见:
-
-
方法详情
-
format
public final StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition fieldPosition) 格式化数字以生成表示其紧凑形式的字符串。该号码可以是Number
的任何子类。- 重写:
format
在类NumberFormat
中- 参数:
number
- 要格式化的数字toAppendTo
- 要附加格式化文本的StringBuffer
fieldPosition
- 跟踪字段在返回字符串中的位置。例如,为了格式化US locale
中的数字123456789
,如果给定的fieldPosition
是NumberFormat.INTEGER_FIELD
,则对于输出字符串123M
,fieldPosition
的开始索引和结束索引将分别设置为 0 和 3。类似地,可以分别使用NumberFormat.Field.PREFIX
和NumberFormat.Field.SUFFIX
获得前缀和后缀字段的位置。- 返回:
StringBuffer
作为toAppendTo
传入- 抛出:
IllegalArgumentException
- 如果number
是null
或者不是Number
的实例NullPointerException
- 如果toAppendTo
或fieldPosition
是null
ArithmeticException
- 如果需要将舍入模式设置为RoundingMode.UNNECESSARY
的舍入- 参见:
-
format
格式化 double 以生成表示其紧凑形式的字符串。- 指定者:
format
在类NumberFormat
中- 参数:
number
- 要格式化的双数result
- 要附加文本的位置fieldPosition
- 跟踪字段在返回字符串中的位置。例如,要格式化US locale
中的数字1234567.89
如果给定的fieldPosition
是NumberFormat.INTEGER_FIELD
,则fieldPosition
的开始索引和结束索引将分别设置为 0 和 1,用于输出字符串1M
。类似地,可以分别使用NumberFormat.Field.PREFIX
和NumberFormat.Field.SUFFIX
获得前缀和后缀字段的位置。- 返回:
StringBuffer
作为result
传入- 抛出:
NullPointerException
- 如果result
或fieldPosition
是null
ArithmeticException
- 如果需要将舍入模式设置为RoundingMode.UNNECESSARY
的舍入- 参见:
-
format
格式化 long 以生成表示其紧凑形式的字符串。- 指定者:
format
在类NumberFormat
中- 参数:
number
- 要格式化的长数字result
- 要附加文本的位置fieldPosition
- 跟踪字段在返回字符串中的位置。例如,要格式化US locale
中的数字123456789
,如果给定的fieldPosition
是NumberFormat.INTEGER_FIELD
,则fieldPosition
的开始索引和结束索引将分别设置为 0 和 3,用于输出字符串123M
。类似地,可以分别使用NumberFormat.Field.PREFIX
和NumberFormat.Field.SUFFIX
获得前缀和后缀字段的位置。- 返回:
StringBuffer
作为result
传入- 抛出:
NullPointerException
- 如果result
或fieldPosition
是null
ArithmeticException
- 如果需要将舍入模式设置为RoundingMode.UNNECESSARY
的舍入- 参见:
-
formatToCharacterIterator
格式化生成AttributedCharacterIterator
的对象。返回的AttributedCharacterIterator
可用于构建结果字符串,以及确定有关结果字符串的信息。AttributedCharacterIterator
的每个属性键都是NumberFormat.Field
类型,属性值与属性键相同。返回的迭代器(如果存在)的前缀和后缀部分分别由属性NumberFormat.Field.PREFIX
和NumberFormat.Field.SUFFIX
表示。- 重写:
formatToCharacterIterator
在类Format
中- 参数:
obj
- 要格式化的对象- 返回:
-
一个
AttributedCharacterIterator
描述格式化值 - 抛出:
NullPointerException
- 如果 obj 为空IllegalArgumentException
- 当 Format 无法格式化给定对象时ArithmeticException
- 如果需要将舍入模式设置为RoundingMode.UNNECESSARY
的舍入
-
parse
解析字符串中的紧凑数字以生成Number
。该方法尝试从
pos
给出的索引开始解析文本。如果解析成功,则将pos
的索引更新为最后使用的字符后的索引(解析不一定使用到字符串末尾的所有字符),并返回解析后的数字。更新后的pos
可用于指示下一次调用此方法的起点。如果发生错误,则不更改pos
的索引,将pos
的错误索引设置为发生错误的字符的索引,并返回null
。该值是给定文本中的数字部分乘以所附词缀的等效数字(例如,
US locale
中的“K”= 1000)。返回的子类取决于isParseBigDecimal()
的值。- 如果
isParseBigDecimal()
为 false(默认值),则大多数整数值都作为Long
对象返回,无论它们是如何编写的:"17K"
和"17.000K"
都解析为Long.valueOf(17000)
。如果值不适合Long
,则结果返回为Double
。这包括带有小数部分的值、无限值、NaN
和值 -0.0。调用者可以使用
Number
方法doubleValue
、longValue
等来获取他们想要的类型。 - 如果
isParseBigDecimal()
为真,则值作为BigDecimal
对象返回。负无穷大和正无穷大以及 NaN 的特殊情况作为Double
实例返回,其中包含相应的Double
常量的值。
CompactNumberFormat
解析所有表示十进制数字的 Unicode 字符,如Character.digit()
所定义。此外,CompactNumberFormat
还将以DecimalFormatSymbols
对象中定义的本地化零数字开头的十个连续字符识别为数字。CompactNumberFormat
parse 不允许解析科学记数法。例如,解析US locale
中的字符串"1.05E4K"
在字符“E”处中断并返回 1.05。- 指定者:
parse
在类NumberFormat
中- 参数:
text
- 要解析的字符串pos
- 具有如上所述的索引和错误索引信息的ParsePosition
对象- 返回:
-
解析后的值,如果解析失败则返回
null
- 抛出:
NullPointerException
- 如果text
或pos
为空- 参见:
- 如果
-
setMaximumIntegerDigits
public void setMaximumIntegerDigits(int newValue) 设置数字的整数部分中允许的最大位数。最大允许的整数范围是 309,如果newValue
> 309,则最大整数位数设置为 309。负输入值被替换为 0。- 重写:
setMaximumIntegerDigits
在类NumberFormat
中- 参数:
newValue
- 要显示的最大整数位数- 参见:
-
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue) 设置数字的整数部分中允许的最小位数。最大允许的整数范围是 309,如果newValue
> 309,则最小整数位数设置为 309。负输入值被替换为 0。- 重写:
setMinimumIntegerDigits
在类NumberFormat
中- 参数:
newValue
- 要显示的最小整数位数- 参见:
-
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue) 设置数字的小数部分允许的最小位数。允许的最大小数范围是 340,如果newValue
> 340,则最小小数位数设置为 340。负输入值被替换为 0。- 重写:
setMinimumFractionDigits
在类NumberFormat
中- 参数:
newValue
- 要显示的最小小数位数- 参见:
-
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue) 设置数字的小数部分允许的最大位数。最大允许小数范围为 340,如果newValue
> 340,则最大小数位数设置为 340。负输入值被替换为 0。- 重写:
setMaximumFractionDigits
在类NumberFormat
中- 参数:
newValue
- 要显示的最大小数位数- 参见:
-
getRoundingMode
获取在此CompactNumberFormat
中使用的RoundingMode
。- 重写:
getRoundingMode
在类NumberFormat
中- 返回:
RoundingMode
用于此CompactNumberFormat
- 参见:
-
setRoundingMode
设置在此CompactNumberFormat
中使用的RoundingMode
。- 重写:
setRoundingMode
在类NumberFormat
中- 参数:
roundingMode
- 要使用的RoundingMode
- 抛出:
NullPointerException
- 如果roundingMode
是null
- 参见:
-
getGroupingSize
public int getGroupingSize()返回分组大小。分组大小是数字整数部分中分组分隔符之间的位数。例如,在US locale
的紧凑编号"12,347 trillion"
中,分组大小为 3。- 返回:
- 分组大小
- 参见:
-
setGroupingSize
public void setGroupingSize(int newValue) 设置分组大小。分组大小是数字整数部分中分组分隔符之间的位数。例如,在US locale
的紧凑数字"12,347 trillion"
中,分组大小为 3。分组大小必须大于或等于零且小于或等于 127。- 参数:
newValue
- 新的分组大小- 抛出:
IllegalArgumentException
- 如果newValue
为负数或大于 127- 参见:
-
isGroupingUsed
public boolean isGroupingUsed()如果以这种格式使用分组,则返回 true。例如,将分组依据和分组大小设置为 3,数字12346567890987654
可以在US locale
中格式化为"12,347 trillion"
。分组分隔符取决于locale。- 重写:
isGroupingUsed
在类NumberFormat
中- 返回:
true
如果使用分组;false
否则- 参见:
-
setGroupingUsed
public void setGroupingUsed(boolean newValue) 设置是否以这种格式使用分组。- 重写:
setGroupingUsed
在类NumberFormat
中- 参数:
newValue
-true
如果使用分组;false
否则- 参见:
-
isParseIntegerOnly
public boolean isParseIntegerOnly()如果此格式仅解析紧凑数字的数字部分中的整数,则返回 true。解析一个整数意味着从数字部分只考虑一个整数,前缀/后缀仍然被认为是计算结果输出。例如,在US locale
中,如果此方法返回true
,则字符串"1234.78 thousand"
将被解析为值1234000
(1234(整数部分)* 1000(千)),小数部分将被跳过。解析操作接受的确切格式取决于locale。- 重写:
isParseIntegerOnly
在类NumberFormat
中- 返回:
true
紧凑型数字是否应仅解析为整数;false
否则
-
setParseIntegerOnly
public void setParseIntegerOnly(boolean value) 设置此格式是否仅解析紧凑数字的数字部分中的整数。- 重写:
setParseIntegerOnly
在类NumberFormat
中- 参数:
value
-true
紧凑型数字是否应仅解析为整数;false
否则- 参见:
-
isParseBigDecimal
public boolean isParseBigDecimal()返回parse(String, ParsePosition)
方法是否返回BigDecimal
。默认值为假。- 返回:
true
如果 parse 方法返回 BigDecimal;false
否则- 参见:
-
setParseBigDecimal
public void setParseBigDecimal(boolean newValue) 设置parse(String, ParsePosition)
方法是否返回BigDecimal
。- 参数:
newValue
-true
如果解析方法返回 BigDecimal;false
否则- 参见:
-
equals
- 重写:
equals
在类NumberFormat
中- 参数:
obj
- 要与之比较的对象- 返回:
-
如果这等于另一个
CompactNumberFormat
则为真 - 参见:
-
hashCode
public int hashCode()返回此CompactNumberFormat
实例的哈希码。- 重写:
hashCode
在类NumberFormat
中- 返回:
-
这个
CompactNumberFormat
的哈希码 - 参见:
-
clone
创建并返回此CompactNumberFormat
实例的副本。- 重写:
clone
在类NumberFormat
中- 返回:
- 此实例的克隆
- 参见:
-