- 所有已实现的接口:
Serializable,Cloneable
- 已知子类:
ChoiceFormat,CompactNumberFormat,DecimalFormat
NumberFormat 是所有数字格式的抽象基类。此类提供用于格式化和解析数字的接口。 NumberFormat 还提供了确定哪些locale具有数字格式及其名称的方法。
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 locale 中的 "2K"。使用 getPercentInstance 获取显示百分比的格式。使用这种格式,0.53 之类的分数显示为 53%。
您还可以使用 setMinimumFractionDigits 等方法控制数字的显示。如果您想要更多地控制格式或解析,或者想要给您的用户更多的控制权,您可以尝试将从工厂方法获得的 NumberFormat 转换为 DecimalFormat 或 CompactNumberFormat,具体取决于所使用的工厂方法。这适用于绝大多数地区;请记住将它放在 try 块中,以防遇到不寻常的情况。
NumberFormat 和 DecimalFormat 的设计使得一些控件用于格式化,而其他控件用于解析。下面分别对这些控制方法进行详细说明,
setParseIntegerOnly :仅影响解析,例如,如果为真,则“3456.78”→ 3456(并在索引 6 之后离开解析位置)如果为假,“3456.78”→ 3456.78(并在索引 8 之后离开解析位置)这与格式无关.如果您不想在小数点后可能没有数字的地方显示小数点,请使用 setDecimalSeparatorAlwaysShown。
setDecimalSeparatorAlwaysShown :只影响格式,并且只影响小数点后可能没有数字的地方,例如像“#,##0.##”这样的模式,例如,如果为真,则 3456.00 → “3,456”。如果为假,则 3456.00 → "3456" 这与解析无关。如果希望解析在小数点处停止,请使用 setParseIntegerOnly。
您还可以将 parse 和 format 方法的形式与 ParsePosition 和 FieldPosition 结合使用,以允许您:
- 逐步解析字符串的各个部分
- 对齐小数点和其他区域
- 如果您使用带有对齐间距的等宽字体,则可以在格式调用中传递
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的实现和规范。默认实现提供
RoundingMode中定义的舍入模式来格式化数字。它使用 圆半偶数算法 。要更改舍入模式,请使用setRoundingMode。静态工厂方法返回的NumberFormat配置为使用半偶数舍入(请参阅RoundingMode.HALF_EVEN)对浮点数进行格式化。- 自从:
- 1.1
- 参见:
-
内部类总结
内部类修饰符和类型类描述static class定义用作从NumberFormat.formatToCharacterIterator返回的AttributedCharacterIterator中的属性键和FieldPosition中的字段标识符的常量。static enum数字格式样式。 -
字段摘要
字段修饰符和类型Field描述static final int用于构造 FieldPosition 对象的字段常量。static final int用于构造 FieldPosition 对象的字段常量。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述clone()重写可克隆。boolean重写等于。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[]返回所有locale的数组,此类的get*Instance方法可以为其返回本地化实例。static NumberFormatstatic NumberFormatgetCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle) 返回指定locale和formatStyle的紧凑数字格式。获取格式化货币值时此数字格式使用的货币。static final NumberFormat返回当前默认FORMATlocale的货币格式。static NumberFormatgetCurrencyInstance(Locale inLocale) 返回指定locale的货币格式。static final NumberFormat返回当前默认FORMATlocale的通用数字格式。static NumberFormatgetInstance(Locale inLocale) 返回指定locale的通用数字格式。static final NumberFormat返回当前默认FORMATlocale的整数格式。static NumberFormatgetIntegerInstance(Locale inLocale) 返回指定locale的整数格式。int返回数字的小数部分允许的最大位数。int返回数字的整数部分允许的最大位数。int返回数字的小数部分中允许的最小位数。int返回数字的整数部分中允许的最小位数。static final NumberFormat返回当前默认FORMATlocale的通用数字格式。static NumberFormatgetNumberInstance(Locale inLocale) 返回指定locale的通用数字格式。static final NumberFormat返回当前默认FORMATlocale的百分比格式。static NumberFormatgetPercentInstance(Locale inLocale) 返回指定locale的百分比格式。获取在此 NumberFormat 中使用的RoundingMode。inthashCode()重写哈希代码。boolean如果以这种格式使用分组,则返回 true。boolean如果此格式仅将数字解析为整数,则返回 true。从给定字符串的开头解析文本以生成数字。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。在类 java.text.Format 中声明的方法
format, formatToCharacterIterator, parseObject
-
字段详细信息
-
INTEGER_FIELD
public static final int INTEGER_FIELD用于构造 FieldPosition 对象的字段常量。表示应返回格式化数字的整数部分的位置。- 参见:
-
FRACTION_FIELD
public static final int FRACTION_FIELD用于构造 FieldPosition 对象的字段常量。表示应返回格式化数字的小数部分的位置。- 参见:
-
-
构造方法详细信息
-
NumberFormat
protected NumberFormat()唯一的构造方法。 (对于子类构造方法的调用,通常是隐式的。)
-
-
方法详情
-
format
格式化数字并将结果文本附加到给定的字符串缓冲区。该号码可以是Number的任何子类。此实现使用
Number.longValue()提取数字值,用于可以转换为long而不会丢失信息的所有整数类型值,包括bit length小于 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- 要附加格式化文本的StringBufferpos- 跟踪字段在返回字符串中的位置。例如,要在Locale.US区域设置中格式化数字1234567.89,如果给定的fieldPosition是INTEGER_FIELD,则fieldPosition的开始索引和结束索引将分别设置为 0 和 9,用于输出字符串1,234,567.89。- 返回:
-
作为
toAppendTo传入的值 - 抛出:
IllegalArgumentException- 如果number为空或不是Number的实例。NullPointerException- 如果toAppendTo或pos为空ArithmeticException- 如果需要舍入模式设置为 RoundingMode.UNNECESSARY- 参见:
-
parseObject
解析字符串中的文本以生成Number。该方法尝试从
pos给出的索引开始解析文本。如果解析成功,则将pos的索引更新为最后使用的字符后的索引(解析不一定使用到字符串末尾的所有字符),并返回解析后的数字。更新后的pos可用于指示下一次调用此方法的起点。如果发生错误,则不更改pos的索引,将pos的错误索引设置为发生错误的字符的索引,并返回null。有关数字解析的更多信息,请参阅
parse(String, ParsePosition)方法。- 指定者:
parseObject在类Format中- 参数:
source- AString,其中的一部分应该被解析。pos- 具有如上所述的索引和错误索引信息的ParsePosition对象。- 返回:
-
从字符串中解析出的
Number。如果出现错误,则返回 null。 - 抛出:
NullPointerException- 如果source或pos为空。
-
format
格式专业化。- 参数:
number- 要格式化的双数- 返回:
- 格式化的字符串
- 抛出:
ArithmeticException- 如果需要舍入模式设置为 RoundingMode.UNNECESSARY- 参见:
-
format
格式专业化。- 参数:
number- 要格式化的长数字- 返回:
- 格式化的字符串
- 抛出:
ArithmeticException- 如果需要舍入模式设置为 RoundingMode.UNNECESSARY- 参见:
-
format
格式专业化。- 参数:
number- 要格式化的双数toAppendTo- 要附加格式化文本的 StringBufferpos- 跟踪字段在返回字符串中的位置。例如,要在Locale.US区域设置中格式化数字1234567.89,如果给定的fieldPosition是INTEGER_FIELD,则fieldPosition的开始索引和结束索引将分别设置为 0 和 9,用于输出字符串1,234,567.89。- 返回:
- 格式化的 StringBuffer
- 抛出:
ArithmeticException- 如果需要舍入模式设置为 RoundingMode.UNNECESSARY- 参见:
-
format
格式专业化。- 参数:
number- 要格式化的长数字toAppendTo- 要附加格式化文本的 StringBufferpos- 跟踪字段在返回字符串中的位置。例如,要在Locale.USlocale中格式化数字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- 一个String的开头应该被解析。- 返回:
-
从字符串中解析出的
Number。 - 抛出:
ParseException- 如果无法解析指定字符串的开头。
-
isParseIntegerOnly
public boolean isParseIntegerOnly()如果此格式仅将数字解析为整数,则返回 true。例如,在英语locale中,如果 ParseIntegerOnly 为真,则字符串“1234”。将被解析为整数值 1234 并且解析将在“.”处停止。特点。当然,解析操作接受的确切格式取决于locale并由 NumberFormat 的子类确定。- 返回:
true数字是否应该只被解析为整数;false否则
-
setParseIntegerOnly
public void setParseIntegerOnly(boolean value) 设置数字是否应仅解析为整数。- 参数:
value-true如果数字应该只被解析为整数;false否则- 参见:
-
getInstance
返回当前默认FORMATlocale的通用数字格式。这与调用getNumberInstance()相同。- 返回:
-
用于通用数字格式化的
NumberFormat实例
-
getInstance
返回指定locale的通用数字格式。这与调用getNumberInstance(inLocale)相同。- 参数:
inLocale- 所需的locale- 返回:
-
用于通用数字格式化的
NumberFormat实例
-
getNumberInstance
返回当前默认FORMATlocale的通用数字格式。这相当于调用
getNumberInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
-
用于通用数字格式化的
NumberFormat实例 - 参见:
-
getNumberInstance
返回指定locale的通用数字格式。- 参数:
inLocale- 所需的locale- 返回:
-
用于通用数字格式化的
NumberFormat实例
-
getIntegerInstance
返回当前默认FORMATlocale的整数格式。返回的数字格式配置为使用半偶数舍入(请参阅RoundingMode.HALF_EVEN)将浮点数舍入到最接近的整数以进行格式化,并仅解析输入字符串的整数部分(请参阅isParseIntegerOnly)。这相当于调用
getIntegerInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
- 整数值的数字格式
- 自从:
- 1.4
- 参见:
-
getIntegerInstance
返回指定locale的整数格式。返回的数字格式配置为使用半偶数舍入(请参阅RoundingMode.HALF_EVEN)将浮点数舍入到最接近的整数以进行格式化,并仅解析输入字符串的整数部分(请参阅isParseIntegerOnly)。- 参数:
inLocale- 所需的locale- 返回:
- 整数值的数字格式
- 自从:
- 1.4
- 参见:
-
getCurrencyInstance
返回当前默认FORMATlocale的货币格式。这相当于调用
getCurrencyInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
-
用于货币格式化的
NumberFormat实例 - 参见:
-
getCurrencyInstance
返回指定locale的货币格式。如果指定的locale包含“
cf”(货币格式样式)Unicode 扩展,则返回的货币格式使用可用的样式。否则,样式使用默认的“standard”货币格式。例如,如果样式指定“account”,则负货币金额在某些区域使用一对括号。- 参数:
inLocale- 所需的locale- 返回:
-
用于货币格式化的
NumberFormat实例
-
getPercentInstance
返回当前默认FORMATlocale的百分比格式。这相当于调用
getPercentInstance(Locale.getDefault(Locale.Category.FORMAT))。- 返回:
-
百分比格式的
NumberFormat实例 - 参见:
-
getPercentInstance
返回指定locale的百分比格式。- 参数:
inLocale- 所需的locale- 返回:
-
百分比格式的
NumberFormat实例
-
getCompactNumberInstance
- 返回:
-
用于紧凑数字格式的
NumberFormat实例 - 自从:
- 12
- 参见:
-
getCompactNumberInstance
返回指定locale和formatStyle的紧凑数字格式。- 参数:
locale- 所需的localeformatStyle- 格式化数字的样式- 返回:
-
用于紧凑数字格式的
NumberFormat实例 - 抛出:
NullPointerException- 如果locale或formatStyle是null- 自从:
- 12
- 参见:
-
getAvailableLocales
返回所有locale的数组,此类的get*Instance方法可以为其返回本地化实例。返回的数组表示 Java 运行时和已安装的NumberFormatProvider实现支持的locale的联合。至少,返回的数组必须包含一个等于Locale.ROOT的Locale实例和一个等于Locale.US的Locale实例。- 返回:
-
本地化
NumberFormat实例可用的区域设置数组。
-
hashCode
public int hashCode()重写哈希代码。 -
equals
重写等于。 -
clone
重写可克隆。 -
isGroupingUsed
public boolean isGroupingUsed()如果以这种格式使用分组,则返回 true。例如,在英语locale中,启用分组后,数字 1234567 可能会被格式化为“1,234,567”。分组分隔符以及每个组的大小取决于locale,并由 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
获取格式化货币值时此数字格式使用的货币。初始值以依赖于locale的方式导出。如果无法确定有效货币并且未使用setCurrency设置货币,则返回值可能为 null。默认实现抛出
UnsupportedOperationException。- 返回:
-
此数字格式使用的货币,或
null - 抛出:
UnsupportedOperationException- 如果数字格式类没有实现货币格式- 自从:
- 1.4
-
setCurrency
设置格式化货币值时此数字格式使用的货币。这不会更新数字格式使用的最小或最大小数位数。默认实现抛出
UnsupportedOperationException。- 参数:
currency- 此数字格式要使用的新货币- 抛出:
UnsupportedOperationException- 如果数字格式类没有实现货币格式NullPointerException- 如果currency为空- 自从:
- 1.4
-
getRoundingMode
获取在此 NumberFormat 中使用的RoundingMode。 NumberFormat 中此方法的默认实现始终抛出UnsupportedOperationException。处理不同舍入模式的子类应该覆盖此方法。- 返回:
-
用于此 NumberFormat 的
RoundingMode。 - 抛出:
UnsupportedOperationException- 默认实现总是抛出这个异常- 自从:
- 1.6
- 参见:
-
setRoundingMode
设置在此 NumberFormat 中使用的RoundingMode。 NumberFormat 中此方法的默认实现始终抛出UnsupportedOperationException。处理不同舍入模式的子类应该覆盖此方法。- 参数:
roundingMode- 要使用的RoundingMode- 抛出:
UnsupportedOperationException- 默认实现总是抛出这个异常NullPointerException- 如果roundingMode为空- 自从:
- 1.6
- 参见:
-