- java.lang.Object
-
- java.text.Format
-
- java.text.NumberFormat
-
- All Implemented Interfaces:
-
Serializable
,Cloneable
- 已知直接子类:
-
ChoiceFormat
,DecimalFormat
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。
Synchronization
数字格式通常不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。
- 实现要求:
-
该
format(double, StringBuffer, FieldPosition)
,format(long, StringBuffer, FieldPosition)
和parse(String, ParsePosition)
方法可能抛出NullPointerException
,如果他们的任何参数为null
。 子类可以提供自己的实现和规范约NullPointerException
。 - 从以下版本开始:
- 1.1
- 另请参见:
-
DecimalFormat
,ChoiceFormat
, Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
NumberFormat.Field
定义了用于作为属性键常数AttributedCharacterIterator
从返回NumberFormat.formatToCharacterIterator
和字段标识符在FieldPosition
。
-
Field Summary
Fields Modifier and Type Field 描述 static int
FRACTION_FIELD
用于构造FieldPosition对象的字段常量。static int
INTEGER_FIELD
用于构造FieldPosition对象的字段常量。
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
NumberFormat()
唯一的构造函数。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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()
新新新旗新新新新旗新新旗新新旗新新旗旗新新旗新新旗旗新新旗新旗旗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)
设置数字小数部分允许的最大位数。 maximumFractionDigits必须为〜最小FractionDigits。void
setMaximumIntegerDigits(int newValue)
设置数字的整数部分允许的最大位数。 maximumIntegerDigits必须为≤最小值。void
setMinimumFractionDigits(int newValue)
设置数字小数部分允许的最小位数。 minimumFractionDigits必须是最大值。void
setMinimumIntegerDigits(int newValue)
设置数字的整数部分允许的最小位数。 minimumIntegerDigits必须是最大值。void
setParseIntegerOnly(boolean value)
设置是否仅将数字解析为整数。void
setRoundingMode(RoundingMode roundingMode)
设置此NumberFormat中使用的RoundingMode
。-
Methods inherited from class java.text.Format
format, formatToCharacterIterator, parseObject
-
-
-
-
字段详细信息
-
INTEGER_FIELD
public static final int INTEGER_FIELD
用于构造FieldPosition对象的字段常量。 表示应该返回格式化数字的整数部分的位置。- 另请参见:
-
FieldPosition
, Constant Field Values
-
FRACTION_FIELD
public static final int FRACTION_FIELD
用于构造FieldPosition对象的字段常量。 表示应该返回格式化数字的分数部分的位置。- 另请参见:
-
FieldPosition
, Constant Field Values
-
-
方法详细信息
-
format
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
值的信息和精度损失。- Specified by:
-
format
在类Format
- 参数
-
number
- 要格式化的号码 -
toAppendTo
- 要附加格式化文本的StringBuffer
-
pos
- 输入:如果需要,对齐字段。 输出:对齐字段的偏移量。 - 结果
-
该值传递为
toAppendTo
- 异常
-
IllegalArgumentException
- 如果number
为空,Number
的实例。 -
NullPointerException
- 如果toAppendTo
或pos
为空 -
ArithmeticException
- 如果舍入模式设置为RoundingMode.UNNESSESSARY,则需要舍入 - 另请参见:
-
FieldPosition
-
parseObject
public final Object parseObject(String source, ParsePosition pos)
从字符串中解析文本,产生一个Number
。该方法尝试从
pos
给出的索引开始解析文本。 如果解析成功,那么pos
的索引将在使用最后一个字符后更新为索引(解析不一定使用字符串末尾的所有字符),并返回解析的数字。 更新的pos
可用于指示下一次调用此方法的起始点。 如果发生错误,则pos
的索引不改变,则将错误索引pos
设置为发生错误的字符的索引,返回null。有关数字解析的更多信息,请参阅
parse(String, ParsePosition)
方法。- Specified by:
-
parseObject
在类Format
- 参数
-
source
- AString
,其中的一部分应该被解析。 -
pos
索引和错误索引信息的pos
- AParsePosition
对象。 - 结果
-
A
Number
从字符串解析。 万一出错,返回null。 - 异常
-
NullPointerException
- 如果source
或pos
为空。
-
format
public final String format(double number)
专业化格式。- 参数
-
number
- 双数格式 - 结果
- 格式化的字符串
- 异常
-
ArithmeticException
- 如果舍入模式设置为RoundingMode.UNNECESSARY,则需要舍入 - 另请参见:
-
Format.format(java.lang.Object)
-
format
public final String format(long number)
专业化格式。- 参数
-
number
- 长编号格式 - 结果
- 格式化的字符串
- 异常
-
ArithmeticException
- 如果舍入方式设置为RoundingMode.UNNECESSARY,则需要舍入 - 另请参见:
-
Format.format(java.lang.Object)
-
format
public abstract StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos)
专业化格式。- 参数
-
number
- 双数格式 -
toAppendTo
- 要附加格式化文本的StringBuffer -
pos
- 字段位置 - 结果
- 格式化的StringBuffer
- 异常
-
ArithmeticException
- 如果舍入方式设置为RoundingMode.UNNECESSARY,则需要舍入 - 另请参见:
-
Format.format(java.lang.Object)
-
format
public abstract StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos)
专业化格式。- 参数
-
number
- 长数字格式 -
toAppendTo
- 要附加格式化文本的StringBuffer -
pos
- 字段位置 - 结果
- 格式化的StringBuffer
- 异常
-
ArithmeticException
- 如果舍入模式设置为RoundingMode.UNNECESSARY,则需要舍入 - 另请参见:
-
Format.format(java.lang.Object)
-
parse
public abstract Number parse(String source, ParsePosition parsePosition)
如果可能,返回长(例如,在[Long.MIN_VALUE,Long.MAX_VALUE]范围内,无小数),否则为Double。 如果IntegerOnly被设置,将在小数点(或等效的位置)停止;例如,对于有理数字“1 2/3”,将在1)之后停止。 不抛出异常; 如果没有对象可以解析,索引没有变化!- 参数
-
source
- 要解析的字符串 -
parsePosition
- 解析位置 - 结果
- 被解析的价值
- 另请参见:
-
isParseIntegerOnly()
,Format.parseObject(java.lang.String, java.text.ParsePosition)
-
parse
public Number parse(String source) throws ParseException
- 参数
-
source
- AString
其开头应该被解析。 - 结果
-
A
Number
从字符串中解析。 - 异常
-
ParseException
- 如果指定字符串的开头不能被解析。
-
isParseIntegerOnly
public boolean isParseIntegerOnly()
如果此格式将仅将数字解析为整数,则返回true。 例如在英语语言环境中,使用ParseIntegerOnly true,字符串“1234”。 将被解析为整数值1234,解析将停止在“”。 字符。 当然,解析操作接受的确切格式是区域设置依赖,并由NumberFormat的子类决定。- 结果
-
true
如果数字只能解析为整数; 否则为false
-
setParseIntegerOnly
public void setParseIntegerOnly(boolean value)
设置是否仅将数字解析为整数。- 参数
-
value
-true
如果数字只能解析为整数; 否则为false
- 另请参见:
-
isParseIntegerOnly()
-
getInstance
public static final NumberFormat getInstance()
返回当前默认的FORMAT
区域设置的通用数字格式。 这与拨打getNumberInstance()
相同。- 结果
-
用于通用数字格式化的
NumberFormat
实例
-
getInstance
public static NumberFormat getInstance(Locale inLocale)
返回指定区域设置的通用数字格式。 这与调用getNumberInstance(inLocale)
相同。- 参数
-
inLocale
- 所需的语言环境 - 结果
-
用于通用数字格式化的
NumberFormat
实例
-
getNumberInstance
public static final NumberFormat getNumberInstance()
返回当前默认的FORMAT
区域设置的通用数字格式。这相当于调用
getNumberInstance(Locale.getDefault(Locale.Category.FORMAT))
。- 结果
-
用于通用数字格式化的
NumberFormat
实例 - 另请参见:
-
Locale.getDefault(java.util.Locale.Category)
,Locale.Category.FORMAT
-
getNumberInstance
public static NumberFormat getNumberInstance(Locale inLocale)
返回指定区域设置的通用数字格式。- 参数
-
inLocale
- 所需的语言环境 - 结果
-
用于通用数字格式化的
NumberFormat
实例
-
getIntegerInstance
public static final NumberFormat getIntegerInstance()
返回当前默认FORMAT
区域设置的整数格式。 返回的数字格式被配置成使用半甚至舍入圆浮点数到最接近的整数(参见RoundingMode.HALF_EVEN
)进行格式化,并且解析仅一个输入字符串的整数部分(参见isParseIntegerOnly
)。这相当于调用
getIntegerInstance(Locale.getDefault(Locale.Category.FORMAT))
。- 结果
- 整数值的数字格式
- 从以下版本开始:
- 1.4
- 另请参见:
-
getRoundingMode()
,Locale.getDefault(java.util.Locale.Category)
,Locale.Category.FORMAT
-
getIntegerInstance
public static NumberFormat getIntegerInstance(Locale inLocale)
返回指定区域设置的整数格式。 返回的数字格式被配置成使用半甚至舍入圆浮点数到最接近的整数(参见RoundingMode.HALF_EVEN
)进行格式化,并且解析仅一个输入字符串的整数部分(参见isParseIntegerOnly
)。- 参数
-
inLocale
- 所需的语言环境 - 结果
- 整数值的数字格式
- 从以下版本开始:
- 1.4
- 另请参见:
-
getRoundingMode()
-
getCurrencyInstance
public static final NumberFormat getCurrencyInstance()
返回当前默认的货币格式FORMAT
区域设置。这相当于调用
getCurrencyInstance(Locale.getDefault(Locale.Category.FORMAT))
。- 结果
-
货币格式化的
NumberFormat
实例 - 另请参见:
-
Locale.getDefault(java.util.Locale.Category)
,Locale.Category.FORMAT
-
getCurrencyInstance
public static NumberFormat getCurrencyInstance(Locale inLocale)
返回指定区域设置的货币格式。- 参数
-
inLocale
- 所需的语言环境 - 结果
-
货币格式化的
NumberFormat
实例
-
getPercentInstance
public static final NumberFormat getPercentInstance()
返回当前默认值为FORMAT
的区域设置的百分比格式。这相当于调用
getPercentInstance(Locale.getDefault(Locale.Category.FORMAT))
。- 结果
-
用于百分比格式化的
NumberFormat
实例 - 另请参见:
-
Locale.getDefault(java.util.Locale.Category)
,Locale.Category.FORMAT
-
getPercentInstance
public static NumberFormat getPercentInstance(Locale inLocale)
返回指定区域设置的百分比格式。- 参数
-
inLocale
- 所需的语言环境 - 结果
-
用于百分比格式化的
NumberFormat
实例
-
getAvailableLocales
public static Locale[] getAvailableLocales()
返回一个所有语言环境的数组,该类的get*Instance
方法可以返回本地化实例。 返回的数组表示由Java运行时支持的语言环境和已安装的NumberFormatProvider
实现的联合。 它必须包含至少一个Locale
实例,等于Locale.US
。- 结果
-
一组可用于本地化的本地化的区域设置
NumberFormat
。
-
hashCode
public int hashCode()
覆盖hashCode。- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
equals
public boolean equals(Object obj)
覆盖等于。- 重写:
-
equals
在类Object
- 参数
-
obj
- 与之比较的参考对象。 - 结果
-
true
如果此对象与obj参数相同; 否则为false
。 - 另请参见:
-
Object.hashCode()
,HashMap
-
isGroupingUsed
public boolean isGroupingUsed()
新新新旗新新新新旗新新旗新新旗新新旗旗新新旗新新旗旗新新旗新旗旗 例如,在英文区域设置中,通过分组,数字1234567可能被格式化为“1,234,567”。 分组分隔符以及每个组的大小取决于区域设置,并由NumberFormat的子类决定。- 结果
-
true
如果使用分组;false
否则 - 另请参见:
-
setGroupingUsed(boolean)
-
setGroupingUsed
public void setGroupingUsed(boolean newValue)
设置是否以此格式使用分组。- 参数
-
newValue
-true
如果使用分组; 否则为false
- 另请参见:
-
isGroupingUsed()
-
getMaximumIntegerDigits
public int getMaximumIntegerDigits()
返回数字整数部分允许的最大位数。- 结果
- 最大位数
- 另请参见:
-
setMaximumIntegerDigits(int)
-
setMaximumIntegerDigits
public void setMaximumIntegerDigits(int newValue)
设置数字的整数部分允许的最大位数。 maximumIntegerDigits必须为≤最小值。 如果maximumIntegerDigits的新值小于minimumIntegerDigits的当前值,那么minimumIntegerDigits也将被设置为新值。- 参数
-
newValue
- 要显示的最大整数位数; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。 - 另请参见:
-
getMaximumIntegerDigits()
-
getMinimumIntegerDigits
public int getMinimumIntegerDigits()
返回数字整数部分允许的最小位数。- 结果
- 最小位数
- 另请参见:
-
setMinimumIntegerDigits(int)
-
setMinimumIntegerDigits
public void setMinimumIntegerDigits(int newValue)
设置数字的整数部分允许的最小位数。 minimumIntegerDigits必须是最大值。 如果minimumIntegerDigits的新值超过当前的maximumIntegerDigits值,那么maximumIntegerDigits也将被设置为新的值- 参数
-
newValue
- 要显示的最小整数数字; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。 - 另请参见:
-
getMinimumIntegerDigits()
-
getMaximumFractionDigits
public int getMaximumFractionDigits()
返回数字小数部分允许的最大位数。- 结果
- 最大位数。
- 另请参见:
-
setMaximumFractionDigits(int)
-
setMaximumFractionDigits
public void setMaximumFractionDigits(int newValue)
设置数字小数部分允许的最大位数。 maximumFractionDigits必须为〜最小FractionDigits。 如果maximumFractionDigits的新值小于minimumFractionDigits的当前值,那么minimumFractionDigits也将被设置为新值。- 参数
-
newValue
- 要显示的最小数字位数; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。 - 另请参见:
-
getMaximumFractionDigits()
-
getMinimumFractionDigits
public int getMinimumFractionDigits()
返回数字小数部分允许的最小位数。- 结果
- 最小位数
- 另请参见:
-
setMinimumFractionDigits(int)
-
setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue)
设置数字小数部分允许的最小位数。 minimumFractionDigits必须是最大值。 如果minimumFractionDigits的新值超过了currentFractionDigits的当前值,那么maximumIntegerDigits也将被设置为新的值- 参数
-
newValue
- 要显示的最小数字数字; 如果小于零,则使用零。 具体的子类可能会强制适用于正在格式化的数字类型的此值的上限。 - 另请参见:
-
getMinimumFractionDigits()
-
getCurrency
public Currency getCurrency()
在格式化货币值时,获取此数字格式使用的货币。 初始值以区域设置依赖的方式导出。 如果无法确定有效货币,并且使用setCurrency
未设定货币,则返回值可能为null。默认实现抛出
UnsupportedOperationException
。- 结果
-
该数字格式使用的货币,或
null
- 异常
-
UnsupportedOperationException
- 如果数字格式类不实现货币格式 - 从以下版本开始:
- 1.4
-
setCurrency
public void setCurrency(Currency currency)
设置格式化货币值时此数字格式使用的货币。 这不会更新数字格式使用的小数位数的最小或最大数量。默认实现抛出
UnsupportedOperationException
。- 参数
-
currency
- 此数字格式使用的新货币 - 异常
-
UnsupportedOperationException
- 如果数字格式类不实现货币格式化 -
NullPointerException
- 如果currency
为空 - 从以下版本开始:
- 1.4
-
getRoundingMode
public RoundingMode getRoundingMode()
获取此NumberFormat中使用的RoundingMode
。 NumberFormat中此方法的默认实现总是抛出UnsupportedOperationException
。 处理不同舍入模式的子类应该覆盖此方法。- 结果
-
用于此NumberFormat的
RoundingMode
。 - 异常
-
UnsupportedOperationException
- 默认实现总是引发这个异常 - 从以下版本开始:
- 1.6
- 另请参见:
-
setRoundingMode(RoundingMode)
-
setRoundingMode
public void setRoundingMode(RoundingMode roundingMode)
设置此NumberFormat中使用的RoundingMode
。 NumberFormat中此方法的默认实现总是抛出UnsupportedOperationException
。 处理不同舍入模式的子类应该覆盖此方法。- 参数
-
roundingMode
- 要使用的RoundingMode
- 异常
-
UnsupportedOperationException
- 默认实现总是引发这个异常 -
NullPointerException
- 如果roundingMode
为空 - 从以下版本开始:
- 1.6
- 另请参见:
-
getRoundingMode()
-
-