java.lang.Object java.text.Format java.text.NumberFormat
public abstract class NumberFormat
NumberFormat
是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat
还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。
NumberFormat
可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。
若要格式化当前 Locale 的数值,可使用其中一个工厂类方法:
如果格式化多个数值,那么获取该格式并多次使用它是更为高效的做法,这样系统就不必多次获取关于语言环境语言和国家/地区约定的信息了。myString = NumberFormat.getInstance().format(myNumber);
若要格式化不同 Locale 的日期,可在对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);
getInstance
或
getNumberInstance
来获取常规数值格式。使用
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。
还可以使用带有 ParsePosition
和 FieldPosition
的 parse
和 format
方法的形式,它们允许:
FieldPosition
,令 field
= INTEGER_FIELD
。在输出时,getEndIndex
将被设置为最后一个整数字符和小数字符之间的偏移量。在字符串前面加入 (desiredSpaceCount - getEndIndex) 个空格。 getEndIndex
的字符串宽度。然后在绘制文本之前将画笔移动 (desiredPixelWidth - widthToAlignmentPoint) 个像素。对于没有小数但可能在末尾有其他字符的字符串,这种方法也是有效的,例如,带有圆括号的负数:"(12)" 用于 -12。 数值格式化通常是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
DecimalFormat
,
ChoiceFormat
,
序列化表格
嵌套类摘要 | |
---|---|
static class |
NumberFormat.Field 定义将用作从 NumberFormat.formatToCharacterIterator 返回的 AttributedCharacterIterator 中属性键以及 FieldPosition 中字段标识符的常量。 |
字段摘要 | |
---|---|
static int |
FRACTION_FIELD 用于构造 FieldPosition 对象的字段常量。 |
static int |
INTEGER_FIELD 用于构造 FieldPosition 对象的字段常量。 |
构造方法摘要 | |
---|---|
protected |
NumberFormat() 唯一的构造方法。 |
方法摘要 | |
---|---|
Object |
clone() 重写 Cloneable |
boolean |
equals(Object obj) 重写 equals |
String |
format(double number) 格式规范。 |
abstract StringBuffer |
format(double number, StringBuffer toAppendTo, FieldPosition pos) 格式规范。 |
String |
format(long number) 格式规范。 |
abstract StringBuffer |
format(long number, StringBuffer toAppendTo, FieldPosition pos) 格式规范。 |
StringBuffer |
format(Object number, StringBuffer toAppendTo, FieldPosition pos) 格式化一个数并将所得文本添加到给定字符串缓冲区。 |
static Locale[] |
getAvailableLocales() 返回一个数组,它包含所有此类的 get*Instance 方法可以为其返回本地化实例的语言环境。 |
Currency |
getCurrency() 获取格式化货币值时此数值格式使用的货币。 |
static NumberFormat |
getCurrencyInstance() 返回当前默认语言环境的货币格式。 |
static NumberFormat |
getCurrencyInstance(Locale inLocale) 返回指定语言环境的货币格式。 |
static NumberFormat |
getInstance() 返回当前默认语言环境的通用数值格式。 |
static NumberFormat |
getInstance(Locale inLocale) 返回指定语言环境的通用数值格式。 |
static NumberFormat |
getIntegerInstance() 返回当前默认语言环境的整数格式。 |
static NumberFormat |
getIntegerInstance(Locale inLocale) 返回指定语言环境的整数格式。 |
int |
getMaximumFractionDigits() 返回数的小数部分所允许的最大位数。 |
int |
getMaximumIntegerDigits() 返回数的整数部分所允许的最大位数。 |
int |
getMinimumFractionDigits() 返回数的小数部分所允许的最小位数。 |
int |
getMinimumIntegerDigits() 返回数的整数部分所允许的最小位数。 |
static NumberFormat |
getNumberInstance() 返回当前默认语言环境的通用数值格式。 |
static NumberFormat |
getNumberInstance(Locale inLocale) 返回指定语言环境的通用数值格式。 |
static NumberFormat |
getPercentInstance() 返回当前默认语言环境的百分比格式。 |
static NumberFormat |
getPercentInstance(Locale inLocale) 返回指定语言环境的百分比格式。 |
RoundingMode |
getRoundingMode() 获取在此 NumberFormat 中使用的 RoundingMode 。 |
int |
hashCode() 重写 hashCode |
boolean |
isGroupingUsed() 如果此格式中使用了分组,则返回 true。 |
boolean |
isParseIntegerOnly() 如果此格式只将数作为整数解析,则返回 true。 |
Number |
parse(String source) 解析给定字符串开头的文本,生成一个数值。 |
abstract Number |
parse(String source, ParsePosition parsePosition) 如果可能则返回 Long (例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 范围内且没有小数),否则返回 Double。 |
Object |
parseObject(String source, ParsePosition pos) 解析字符串中的文本,以生成一个 Number 。 |
void |
setCurrency(Currency currency) 设置格式化货币值时此数值格式使用的货币。 |
void |
setGroupingUsed(boolean newValue) 设置此格式中是否使用分组。 |
void |
setMaximumFractionDigits(int newValue) 设置数的小数部分所允许的最大位数。 |
void |
setMaximumIntegerDigits(int newValue) 设置数的整数部分所允许的最大位数。 |
void |
setMinimumFractionDigits(int newValue) 设置数的小数部分所允许的最小位数。 |
void |
setMinimumIntegerDigits(int newValue) 设置数的整数部分所允许的最小位数。 |
void |
setParseIntegerOnly(boolean value) 设置数是否应该仅作为整数进行解析。 |
void |
setRoundingMode(RoundingMode roundingMode) 设置在此 NumberFormat 中使用的 RoundingMode 。 |
从类 java.text.Format 继承的方法 |
---|
format, formatToCharacterIterator, parseObject |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public static final int INTEGER_FIELD
FieldPosition
,
常量字段值
public static final int FRACTION_FIELD
FieldPosition
,
常量字段值
构造方法详细信息 |
---|
protected NumberFormat()
方法详细信息 |
---|
public StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos)
Number
的任何子类。
对于能够被转换为 long
类型而不丢失信息的所有整型值,此实现使用 Number.longValue()
提取其数值,包括位长
小于 64 的 BigInteger
值;使用 Number.doubleValue()
提取所有其他类型的值。然后它调用 format(long,java.lang.StringBuffer,java.text.FieldPosition)
或 format(double,java.lang.StringBuffer,java.text.FieldPosition)
。这可能导致丢失数值信息以及 BigInteger
和 BigDecimal
值的精度。
number
- 要格式化的数
toAppendTo
- 要添加格式化文本的
StringBuffer
pos
- 输入时:如果需要,是一个对齐字段。输出时:是对齐字段的偏移量。
toAppendTo
传入的值
IllegalArgumentException
- 如果
number
为 null 或不是
Number
的实例。
NullPointerException
- 如果
toAppendTo
或
pos
为 null
ArithmeticException
- 如果需要进行舍入但舍入模式设置为 RoundingMode.UNNECESSARY
FieldPosition
public final Object parseObject(String source, ParsePosition pos)
Number
。
此方法试图解析从 pos
给定的索引处开始的文本。如果解析成功,则将 pos
的索引更新为所解析的最后一字符后的索引(不一定对直到字符串结尾的所有字符进行解析),并返回解析后的数。更新后的 pos
可以用来指示下次调用此方法的起始点。如果发生错误,则 pos
的索引不变,pos
的错误索引被设置为发生错误的字符的索引,并返回 null。
有关数值解析的更多信息,请参阅 parse(String, ParsePosition)
方法。
Format
中的
parseObject
source
- 一部分将要被解析的
String
。
pos
- 具有以上所述的索引和错误索引信息的
ParsePosition
对象。
Number
。如果发生错误,则返回 null。
NullPointerException
- 如果
pos
为 null。
public final String format(double number)
ArithmeticException
- 如果需要进行舍入但舍入模式设置为 RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public final String format(long number)
ArithmeticException
- 如果需要进行舍入但舍入模式设置为 RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public abstract StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos)
ArithmeticException
- 如果需要进行舍入但舍入模式设置为 RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public abstract StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos)
ArithmeticException
- 如果需要进行舍入但舍入模式设置为 RoundingMode.UNNECESSARY
Format.format(java.lang.Object)
public abstract Number parse(String source, ParsePosition parsePosition)
public Number parse(String source) throws ParseException
有关数值解析的更多信息,请参阅 parse(String, ParsePosition)
方法。
source
- 开头应被解析的
String
。
Number
。
ParseException
- 如果无法解析指定字符串的开头。
public boolean isParseIntegerOnly()
public void setParseIntegerOnly(boolean value)
isParseIntegerOnly()
public static final NumberFormat getInstance()
getNumberInstance()
相同。
public static NumberFormat getInstance(Locale inLocale)
getNumberInstance(inLocale)
相同。
public static final NumberFormat getNumberInstance()
public static NumberFormat getNumberInstance(Locale inLocale)
public static final NumberFormat getIntegerInstance()
RoundingMode.HALF_EVEN
),并只解析输入字符串的整数部分(参见
isParseIntegerOnly
)。
getRoundingMode()
public static NumberFormat getIntegerInstance(Locale inLocale)
RoundingMode.HALF_EVEN
),并只解析输入字符串的整数部分(参见
isParseIntegerOnly
)。
getRoundingMode()
public static final NumberFormat getCurrencyInstance()
public static NumberFormat getCurrencyInstance(Locale inLocale)
public static final NumberFormat getPercentInstance()
public static NumberFormat getPercentInstance(Locale inLocale)
public static Locale[] getAvailableLocales()
get*Instance
方法可以为其返回本地化实例的语言环境。返回数组表示 Java 运行时和安装的
NumberFormatProvider
实现所支持的语言环境的并集。它必须至少包含一个等同于
Locale.US
的
Locale
实例。
NumberFormat
实例的语言环境。
public int hashCode()
Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
obj
- 要与之比较的引用对象。
true
;否则返回
false
。
Object.hashCode()
,
Hashtable
public Object clone()
public boolean isGroupingUsed()
setGroupingUsed(boolean)
public void setGroupingUsed(boolean newValue)
isGroupingUsed()
public int getMaximumIntegerDigits()
public void setMaximumIntegerDigits(int newValue)
newValue
- 要显示的最大整数位数;如果小于 0,则使用 0。具体子类可以为此值强加一个上限,以适合于被格式化的数值类型。
getMaximumIntegerDigits()
public int getMinimumIntegerDigits()
public void setMinimumIntegerDigits(int newValue)
newValue
- 要显示的整数的最小位数;如果小于 0,则使用 0。具体子类可以为此值强加一个上限,以适合于被格式化的数值类型。
getMinimumIntegerDigits()
public int getMaximumFractionDigits()
public void setMaximumFractionDigits(int newValue)
newValue
- 要显示的小数的最大位数;如果小于 0,则使用 0。具体子类可以为此值强加一个上限,以适合于被格式化的数值类型。
getMaximumFractionDigits()
public int getMinimumFractionDigits()
public void setMinimumFractionDigits(int newValue)
newValue
- 要显示的小数的最小位数;如果小于 0,则使用 0。具体子类可以为此值强加一个上限,以适合于被格式化的数值类型。
getMinimumFractionDigits()
public Currency getCurrency()
setCurrency
设置任何货币,则返回值为 null。
默认实现抛出 UnsupportedOperationException
。
null
UnsupportedOperationException
- 如果数值格式类不实现货币格式化
public void setCurrency(Currency currency)
默认实现抛出 UnsupportedOpera