public abstract class NumberFormat extends Format
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);
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。
您还可以使用parse
和format
方法与ParsePosition
和FieldPosition
,以允许您:
FieldPosition
您的通话形式,与field
= INTEGER_FIELD
。 在输出时, getEndIndex
将被设置为整数的最后一个字符与小数点之间的偏移量。 在字符串前面添加(desiredSpaceCount - getEndIndex)空格。 getEndIndex
的字符串宽度(以像素为getEndIndex
。 然后在绘制文本之前将笔移动(desiredPixelWidth - widthToAlignmentPoint)。 它也可以在没有十进制的情况下工作,但最后可能有其他字符,例如括号为负数:“(12)”表示-12。 数字格式通常不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。
DecimalFormat
, ChoiceFormat
, Serialized Form
Modifier and Type | Class and Description |
---|---|
static class |
NumberFormat.Field
定义在
AttributedCharacterIterator 返回的
NumberFormat.formatToCharacterIterator 中用作属性键的
AttributedCharacterIterator ,以及FieldPosition中的字段
FieldPosition 。
|
Modifier and Type | Field and Description |
---|---|
static int |
FRACTION_FIELD
用于构造FieldPosition对象的字段常量。
|
static int |
INTEGER_FIELD
用于构造FieldPosition对象的字段常量。
|
Modifier | Constructor and Description |
---|---|
protected |
NumberFormat()
唯一的构造函数。
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
覆盖可克隆。
|
boolean |
equals(Object obj)
覆盖等于。
|
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()
返回当前默认的
FORMAT 区域设置的货币格式。
|
static NumberFormat |
getCurrencyInstance(Locale inLocale)
返回指定区域设置的货币格式。
|
static NumberFormat |
getInstance()
返回当前默认的
FORMAT 区域设置的通用数字格式。
|
static NumberFormat |
getInstance(Locale inLocale)
返回指定区域设置的通用数字格式。
|
static NumberFormat |
getIntegerInstance()
返回当前默认值
FORMAT 区域设置的整数格式。
|
static NumberFormat |
getIntegerInstance(Locale inLocale)
返回指定区域设置的整数格式。
|
int |
getMaximumFractionDigits()
返回数字小数部分允许的最大位数。
|
int |
getMaximumIntegerDigits()
返回数字整数部分允许的最大位数。
|
int |
getMinimumFractionDigits()
返回数字小数部分允许的最小位数。
|
int |
getMinimumIntegerDigits()
返回数字整数部分允许的最小位数。
|
static NumberFormat |
getNumberInstance()
返回当前默认的
FORMAT 区域设置的通用数字格式。
|
static NumberFormat |
getNumberInstance(Locale inLocale)
返回指定区域设置的通用数字格式。
|
static NumberFormat |
getPercentInstance()
返回当前默认值
FORMAT 区域设置的百分比格式。
|
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.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 。
|
format, formatToCharacterIterator, parseObject
public static final int INTEGER_FIELD
FieldPosition
, Constant Field Values
public static final int FRACTION_FIELD
FieldPosition
, Constant Field Values
public StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos)
Number
的任何子类。
该实现使用Number.longValue()
为所有可转换为long
而不丢失信息的积分类型值提取数字的值,包括BigInteger
值为bit length
,小于64的值,以及Number.doubleValue()
为所有其他类型。 然后调用format(long,java.lang.StringBuffer,java.text.FieldPosition)
或format(double,java.lang.StringBuffer,java.text.FieldPosition)
。 这可能导致BigInteger
和BigDecimal
值的BigInteger
和BigDecimal
。
format
在
Format
number
- 要格式化的号码
toAppendTo
-所述
StringBuffer
到的格式化的文本将被所附
pos
- 打开输入:如果需要,对齐字段。
输出:对齐字段的偏移量。
toAppendTo
IllegalArgumentException
- 如果
number
为null或不是
Number
的实例。
NullPointerException
- 如果
toAppendTo
或
pos
为空
ArithmeticException
- 如果舍入方式设置为RoundingMode.UNNECESSARY,则需要舍入
FieldPosition
public final Object parseObject(String source, ParsePosition pos)
Number
。
该方法尝试从pos
给出的索引开始解析文本。 如果解析成功,那么pos
的索引将更新为使用最后一个字符后的索引(解析不一定使用字符串末尾的所有字符),并返回解析的数字。 更新的pos
可用于指示下一次调用此方法的起始点。 如果发生错误,则pos
的索引不改变,将错误发生的pos
的索引设置为pos
的错误索引,返回null。
有关数字解析的更多信息,请参阅parse(String, ParsePosition)
方法。
parseObject
在
Format
source
- A
String
,其中一部分应该被解析。
pos
- 具有
ParsePosition
的索引和错误索引信息的
ParsePosition
对象。
Number
从字符串中解析。
万一出错,返回null。
NullPointerException
- 如果
pos
为空。
public final String format(double number)
number
- 双数格式
ArithmeticException
- 如果舍入方式设置为RoundingMode.UNNECESSARY,则需要舍入
Format.format(java.lang.Object)
public final String format(long number)
number
- 长数格式
ArithmeticException
- 如果舍入模式设置为RoundingMode.UNNECESSARY,则需要舍入
Format.format(java.lang.Object)
public abstract StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos)
number
- 双数格式
toAppendTo
- 要附加格式化文本的StringBuffer
pos
- 字段位置
ArithmeticException
- 如果舍入模式设置为RoundingMode.UNNECESSARY,则需要舍入
Format.format(java.lang.Object)
public abstract StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos)
number
- 长数格式
toAppendTo
- 要附加格式化文本的StringBuffer
pos
- 现场位置
ArithmeticException
- 如果舍入方式设置为RoundingMode.UNNECESSARY,则需要舍入
Format.format(java.lang.Object)
public abstract Number parse(String source, ParsePosition parsePosition)
source
- 要解析的字符串
parsePosition
- 解析位置
isParseIntegerOnly()
,
Format.parseObject(java.lang.String, java.text.ParsePosition)
public Number parse(String source) throws ParseException
source
- A
String
,其开头应被解析。
Number
从字符串中解析。
ParseException
- 如果指定字符串的开头不能被解析。
public boolean isParseIntegerOnly()
true
如果数字只能被解析为整数;
false
否则
public void setParseIntegerOnly(boolean value)
value
- true
如果数字只能解析为整数;
false
否则
isParseIntegerOnly()
public static final NumberFormat getInstance()
FORMAT
区域设置的通用数字格式。
这跟调用getNumberInstance()
相同。
NumberFormat
实例
public static NumberFormat getInstance(Locale inLocale)
getNumberInstance(inLocale)
相同。
inLocale
- 所需的语言环境
NumberFormat
实例
public static final NumberFormat getNumberInstance()
FORMAT
区域设置的通用数字格式。
这相当于调用getNumberInstance(Locale.getDefault(Locale.Category.FORMAT))
。
NumberFormat
实例
Locale.getDefault(java.util.Locale.Category)
,
Locale.Category.FORMAT
public static NumberFormat getNumberInstance(Locale inLocale)
inLocale
- 所需的语言环境
NumberFormat
实例
public static final NumberFormat getIntegerInstance()
FORMAT
区域设置的整数格式。
返回的数字格式被配置成使用半甚至舍入圆浮点数到最接近的整数(参见RoundingMode.HALF_EVEN
)进行格式化,并且解析仅一个输入字符串的整数部分(参见isParseIntegerOnly
)。
这相当于打getIntegerInstance(Locale.getDefault(Locale.Category.FORMAT))
。
getRoundingMode()
,
Locale.getDefault(java.util.Locale.Category)
,
Locale.Category.FORMAT
public static NumberFormat getIntegerInstance(Locale inLocale)
RoundingMode.HALF_EVEN
)进行格式化,并且解析仅一个输入字符串的整数部分(参见isParseIntegerOnly
)。
inLocale
- 所需的语言环境
getRoundingMode()
public static final NumberFormat getCurrencyInstance()
FORMAT
区域设置的货币格式。
这相当于调用getCurrencyInstance(Locale.getDefault(Locale.Category.FORMAT))
。
NumberFormat
实例
Locale.getDefault(java.util.Locale.Category)
,
Locale.Category.FORMAT
public static NumberFormat getCurrencyInstance(Locale inLocale)
inLocale
- 所需的语言环境
NumberFormat
实例
public static final NumberFormat getPercentInstance()
FORMAT
区域设置的百分比格式。
这相当于调用getPercentInstance(Locale.getDefault(Locale.Category.FORMAT))
。
NumberFormat
实例
Locale.getDefault(java.util.Locale.Category)
,
Locale.Category.FORMAT
public static NumberFormat getPercentInstance(Locale inLocale)
inLocale
- 所需的语言环境
NumberFormat
实例
public static Locale[] getAvailableLocales()
get*Instance
方法可以返回本地化实例。
返回的数组表示由Java运行时支持的语言环境和已安装的NumberFormatProvider
实现的联合。
它必须包含至少Locale
实例等于Locale.US
。
NumberFormat
实例可用。
public int hashCode()
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
equals
在
Object
obj
- 与之比较的参考对象。
true
如果此对象与obj参数相同;
false
否则。
Object.hashCode()
, HashMap
public boolean isGroupingUsed()
true
如果使用分组;
false
否则
setGroupingUsed(boolean)
public void setGroupingUsed(boolean newValue)
newValue
- true
如果使用分组;
false
否则
isGroupingUsed()
public int getMaximumIntegerDigits()
setMaximumIntegerDigits(int)
public void setMaximumIntegerDigits(int newValue)
newValue
- 要显示的最大整数位数;
如果小于零,则使用零。
具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
getMaximumIntegerDigits()
public int getMinimumIntegerDigits()
setMinimumIntegerDigits(int)
public void setMinimumIntegerDigits(int newValue)
newValue
- 要显示的最小整数位数;
如果小于零,则使用零。
具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
getMinimumIntegerDigits()
public int getMaximumFractionDigits()
setMaximumFractionDigits(int)
public void setMaximumFractionDigits(int newValue)
newValue
- 要显示的最小数字位数;
如果小于零,则使用零。
具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
getMaximumFractionDigits()
public int getMinimumFractionDigits()
setMinimumFractionDigits(int)
public void setMinimumFractionDigits(int newValue)
newValue
- 要显示的最小数字数字;
如果小于零,则使用零。
具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。
getMinimumFractionDigits()
public Currency getCurrency()
setCurrency
设置货币,则返回值可能为null。
默认实现抛出UnsupportedOperationException
。
null
UnsupportedOperationException
- 如果数字格式类不实现货币格式
public void setCurrency(Currency currency)
默认实现抛出UnsupportedOperationException
。
currency
- 此数字格式使用的新货币
UnsupportedOperationException
- 如果数字格式类不实现货币格式
NullPointerException
- 如果
currency
为空
public RoundingMode getRoundingMode()
RoundingMode
。
NumberFormat中此方法的默认实现始终为UnsupportedOperationException
。
处理不同舍入模式的子类应该覆盖此方法。
RoundingMode
用于此的NumberFormat。
UnsupportedOperationException
- 默认实现总是引发这个异常
setRoundingMode(RoundingMode)
public void setRoundingMode(RoundingMode roundingMode)
RoundingMode
。
NumberFormat中此方法的默认实现总是抛出UnsupportedOperationException
。
处理不同舍入模式的子类应该覆盖此方法。
roundingMode
- 要使用的
RoundingMode
UnsupportedOperationException
- 默认实现总是引发这个异常
NullPointerException
- 如果
roundingMode
为空
getRoundingMode()