DecimalFormat 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
DecimalFormat 是格式化十进制数字的具体子类 NumberFormat 。
[Android.Runtime.Register("java/text/DecimalFormat", DoNotGenerateAcw=true)]
public class DecimalFormat : Java.Text.NumberFormat
[<Android.Runtime.Register("java/text/DecimalFormat", DoNotGenerateAcw=true)>]
type DecimalFormat = class
inherit NumberFormat
- 继承
- 属性
注解
DecimalFormat 是格式化十进制数字的具体子类 NumberFormat 。 它具有各种功能,旨在使任何区域设置中的数字分析和设置格式,包括对西方、阿拉伯语和索引数字的支持。 它还支持不同类型的数字,包括整数(123)、固定点数(123.4)、科学表示法(1.23E4)、百分比(12%)和货币金额(123美元)。 所有这些都可以本地化。
若要获取特定区域设置( NumberFormat 包括默认区域设置),请调用一个 NumberFormat工厂方法,例如 getInstance()。 一般情况下,不要直接调用 DecimalFormat 构造函数,因为 NumberFormat 工厂方法可能返回除其他子类以外的 DecimalFormat子类。 如果需要自定义格式对象,请执行以下操作:
<blockquote>
NumberFormat f = NumberFormat.getInstance(loc);
if (f instanceof DecimalFormat) {
((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
}
</blockquote>
由 DecimalFormat em>pattern</em> 和一组 <em>symbols</em> 组成<。 模式可以直接使用 applyPattern(),或者间接使用 API 方法进行设置。 符号存储在对象 DecimalFormatSymbols 中。 使用 NumberFormat 工厂方法时,模式和符号是从本地化 ResourceBundle的 s 读取的。
<h2>模式</h2>
DecimalFormat 模式具有以下语法: <blockquote>
<i>Pattern:</i>
<i>PositivePattern</i>
<i>PositivePattern</i> ; <i>NegativePattern</i>
<i>PositivePattern:</i>
<i>Prefix<sub>opt</sub></i> <i>Number</i> <i>Suffix<sub>opt</sub></i>
<i>NegativePattern:</i>
<i>Prefix<sub>opt</sub></i> <i>Number</i> <i>Suffix<sub>opt</sub></i>
<i>Prefix:</i>
any Unicode characters except \uFFFE, \uFFFF, and special characters
<i>Suffix:</i>
any Unicode characters except \uFFFE, \uFFFF, and special characters
<i>Number:</i>
<i>Integer</i> <i>Exponent<sub>opt</sub></i>
<i>Integer</i> . <i>Fraction</i> <i>Exponent<sub>opt</sub></i>
<i>Integer:</i>
<i>MinimumInteger</i>
#
# <i>Integer</i>
# , <i>Integer</i>
<i>MinimumInteger:</i>
0
0 <i>MinimumInteger</i>
0 , <i>MinimumInteger</i>
<i>Fraction:</i>
<i>MinimumFraction<sub>opt</sub></i> <i>OptionalFraction<sub>opt</sub></i>
<i>MinimumFraction:</i>
0 <i>MinimumFraction<sub>opt</sub></i>
<i>OptionalFraction:</i>
# <i>OptionalFraction<sub>opt</sub></i>
<i>Exponent:</i>
E <i>MinimumExponent</i>
<i>MinimumExponent:</i>
0 <i>MinimumExponent<sub>opt</sub></i>
</blockquote>
模式 DecimalFormat 包含正和负子模式,例如 "#,##0.00;(#,##0.00)"。 每个子模式都有一个前缀、数字部分和后缀。 负子模式是可选的;如果不存在,则以减号 ('-' U+002D HYPHEN-MINUS) 为前缀的正子模式用作负子模式。 也就是说, "0.00" 单独相当于 "0.00;-0.00"。 如果存在显式负子模式,则它只用于指定负前缀和后缀;数字数、最小数字和其他特征都与正模式相同。 这意味着生成 "#,##0.0#;(#)" 的行为与 "#,##0.0#;(#,##0.0#)".
用于无穷大、数字、分组分隔符、小数分隔符等的各种符号的前缀、后缀和各种符号可以设置为任意值,格式设置期间它们将正确显示。 但是,必须注意符号和字符串不冲突,或者分析将不可靠。 例如,正前缀和负前缀或后缀必须不同,才能 DecimalFormat.parse() 区分正值和负值。 (如果它们相同,则 DecimalFormat 行为将如同未指定负子模式一样。另一个示例是,小数分隔符和分组分隔符应为非重复字符,或者分析是不可能的。
分组分隔符通常用于数千个,但在一些国家,它分隔了数万个。 分组大小是分组字符之间的常量位数,例如 100,000,000 或 4(对于 1,0000,000,000)。 如果提供具有多个分组字符的模式,则最后一个和整数末尾之间的间隔是使用的。 所以"#,##,###,####" == == "######,####""##,####,####"。
<h3>“special_pattern_character”>特殊模式字符</h3>
模式中的许多字符是字面上采用的;在解析期间匹配它们,并在格式设置期间输出不变。 另一方面,特殊字符代表其他字符、字符串或字符类。 除非另有说明,否则必须引用它们作为文本出现在前缀或后缀中。
此处列出的字符用于非本地化模式。 本地化模式改用从此格式化程序的对象中获取的 DecimalFormatSymbols 相应字符,并且这些字符会丢失其特殊状态。 两个例外是未本地化的货币符号和报价。
<blockquote><table class=“striped”><caption style=“display:none”>Chart 显示符号、位置、本地化和含义。</caption><thead><tr><th scope=“col” style=“text-align:left”>Symbol <th scope=“col” style=“text-align:left”>Location <th scope=“col” style=“text-align:left”>Localized?
<th scope=“col” style=“text-align:left”>Meaning </thead><tbody><tr style=“vertical-align:top”><th scope=“row”><0td Number <td>>Yes <td>Digit <tr style=“vertical-align: top”><th scope=“row”><#td>Number <td>Yes <td Digit, zero shows as absent <tr style=“vertical-align:top”th scope=“><row”>.<td>Number <td>>是 <td>Decimal 分隔符或货币小数分隔符 tr style=“vertical-align: top”><th scope=“row”><-td>Number <td>是 <td>减号 <tr style=“vertical-align:top”><th scope=“row”><,td>Number td td Number <td>Yes <td>Grouping separator <or monetary Grouping separator <tr style=“vertical-align: top”<>th scope=“row”E><td>数字 <td>是 <td>分隔 mantissa 和指数在科学表示法。
<em>不需要在前缀或后缀中带引号。</em>tr style=“vertical-align:top”><th scope=“row”><;td Subpattern boundary <td>Yes <td>>Separates positive and negative subpatterns <tr style=“vertical-align: top\u2030><>><”><th scope=“row”>%<td Prefix or suffix <><td td <>><><是 <td>乘以 1000,并按米值 <tr style=“vertical-align: top”><th scope=“row”¤> (\u00A4) <td>前缀或后缀 <td>No <td>Currency 符号,替换为货币符号。 如果翻了一番,则替换为国际货币符号。 如果模式中存在,则使用货币十进制/分组分隔符,而不是十进制/分组分隔符。
<tr style=“vertical-align:top”><th scope=“row”><'td Prefix or suffix <td td>>No <td>Used to quote special characters in a prefix or suffix, for example, "'#'#" formats 123 to"#123". 若要创建单引号本身,请在一行中使用两个: "# o''clock"
</tbody></table></blockquote>
<h3>科学表示法</h3>
科学表示法中的数字表示为 mantissa 的乘积,幂为 1234,可以表示为 1.234 x 10^3。 mantissa 经常在 1.0 和 le 范围内x < 10.0,但它不需要。
DecimalFormat可以指示只能通过模式</em> 格式化和分析科学表示法 <em>;目前没有创建科学表示法格式的工厂方法。 在模式中,指数字符紧跟一个或多个数字字符表示科学表示法。 示例: "0.###E0" 将数字 1234 的格式设置为 "1.234E3".
<ul><li>指数字符后面的数字字符数提供最小指数数字计数。 没有最大值。 负指数是使用本地化减号格式化的, <em>not</em> 前缀和后缀从模式。 这允许模式,如 "0.###E0 m/s".
<li>将整数位数的最小值和最大数解释在一起:
<ul><li>如果整数位数的最大数目大于其最小数字和大于 1,则强制指数为最大整数位数的倍数,并将最小整数位数解释为 1。 最常见的用途是生成 <em 工程表示法</em>,其中指数是三个的倍数,例如"##0.#####E0">。 使用此模式,数字 12345 格式以及"12.345E3"123456格式。"123.456E3"
<li>否则,通过调整指数来实现最小整数位数。 示例:采用 "00.###E0" 生成 "12.3E-4"格式的 0.00123 。
</ul>
<li>mantissa 中的有效数字数是 em>最小整数</em> 和 em>最大分数</em> 数字的总<和<,不受最大整数位数影响。 例如,格式化为 "##0.##E0" 12345。"12.3E3" 若要显示所有数字,请将有效数字计数设置为零。 有效位数不会影响分析。
<li>指数模式可能不包含分组分隔符。 </ul>
<h3>Rounding</h3>
DecimalFormat 提供用于格式设置的 java.math.RoundingMode 舍入模式。 默认情况下,它使用 java.math.RoundingMode#HALF_EVEN RoundingMode.HALF_EVEN。
<h3>Digits</h3>
对于格式设置, DecimalFormat 请使用从对象中 DecimalFormatSymbols 定义为数字的本地化零位开始的十个连续字符。 为了进行分析,可以识别这些数字以及所有 Unicode 十进制数字,如定义 Character#digit Character.digit的那样。
<h4>特殊值</h4>
NaN 格式为字符串,通常具有单个字符 \uFFFD。 此字符串由 DecimalFormatSymbols 对象确定。 这是不使用前缀和后缀的唯一值。
无穷大的格式设置为字符串,该字符串通常具有单个字符 \u221E,并应用了正前缀或负前缀和后缀。 无穷大字符串由 DecimalFormatSymbols 对象确定。
负零("-0") 解析为 <ul<>liBigDecimal(0)> 如果isParseBigDecimal()为 true,li <Long(0)>如果isParseBigDecimal()为 false,则isParseIntegerOnly()为 true,li <Double(-0.0)>如果同时isParseBigDecimal()为 false, isParseIntegerOnly() 则为 false。
</ul>
<h3>“synchronization”>Synchronization</h3>
小数格式通常不会同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部同步。
<h3>示例</h3>
<blockquote>
<strong>{@code
// Print out a number using the localized number, integer, currency,
// and percent format for each locale}</strong>{@code
Locale[] locales = NumberFormat.getAvailableLocales();
double myNumber = -1234.56;
NumberFormat form;
for (int j = 0; j < 4; ++j) {
System.out.println("FORMAT");
for (int i = 0; i < locales.length; ++i) {
if (locales[i].getCountry().length() == 0) {
continue; // Skip language-only locales
}
System.out.print(locales[i].getDisplayName());
switch (j) {
case 0:
form = NumberFormat.getInstance(locales[i]); break;
case 1:
form = NumberFormat.getIntegerInstance(locales[i]); break;
case 2:
form = NumberFormat.getCurrencyInstance(locales[i]); break;
default:
form = NumberFormat.getPercentInstance(locales[i]); break;
}
if (form instanceof DecimalFormat) {
System.out.print(": " + ((DecimalFormat) form).toPattern());
}
System.out.print(" -> " + form.format(myNumber));
try {
System.out.println(" -> " + form.parse(form.format(myNumber)));
} catch (ParseException e) {}
}
}
}
</blockquote>
在 1.1 中添加。
Java文档java.text.DecimalFormat。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
构造函数
| 名称 | 说明 |
|---|---|
| DecimalFormat() |
使用默认区域设置的默认模式和符号 |
| DecimalFormat(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
| DecimalFormat(String, DecimalFormatSymbols) |
使用给定的模式和符号创建 DecimalFormat。 |
| DecimalFormat(String) |
使用给定模式和默认 |
字段
| 名称 | 说明 |
|---|---|
| FractionField |
用于构造 FieldPosition 对象的字段常量。 (继承自 NumberFormat) |
| IntegerField |
用于构造 FieldPosition 对象的字段常量。 (继承自 NumberFormat) |
属性
| 名称 | 说明 |
|---|---|
| Class |
返回此 |
| Currency |
获取格式设置货币值时此数字格式使用的货币。 - 或 - 设置格式设置货币值格式时此数字格式使用的货币。 (继承自 NumberFormat) |
| DecimalFormatSymbols |
返回十进制格式符号的副本,通常不会由程序员或用户更改。 - 或 - 设置十进制格式符号,通常不会由程序员或用户更改。 |
| DecimalSeparatorAlwaysShown |
允许使用整数获取小数分隔符的行为。 - 或 - 允许使用整数设置小数分隔符的行为。 |
| GroupingSize |
返回分组大小。 - 或 - 设置分组大小。 |
| GroupingUsed |
如果采用此格式使用分组,则返回 true。 - 或 - 设置是否将使用此格式的分组。 (继承自 NumberFormat) |
| Handle |
基础 Android 实例的句柄。 (继承自 Object) |
| JniIdentityHashCode |
|
| JniPeerMembers |
|
| MaximumFractionDigits |
返回数字的分数部分允许的最大位数。 - 或 - 设置数字的分数部分允许的最大位数。 (继承自 NumberFormat) |
| MaximumIntegerDigits |
返回数字整数部分中允许的最大位数。 - 或 - 设置数字整数部分中允许的最大位数。 (继承自 NumberFormat) |
| MinimumFractionDigits |
返回数字的分数部分允许的最小位数。 - 或 - 设置数字的分数部分允许的最小位数。 (继承自 NumberFormat) |
| MinimumIntegerDigits |
返回数字整数部分中允许的最小位数。 - 或 - 设置数字整数部分中允许的最小位数。 (继承自 NumberFormat) |
| Multiplier |
获取用于百分比、每毫米和类似格式的乘数。 - 或 - 设置用于百分比、每毫米和类似格式的乘数。 |
| NegativePrefix |
获取负前缀。 -或 - 设置负前缀。 |
| NegativeSuffix |
获取负后缀。 - 或 - 设置负后缀。 |
| ParseBigDecimal |
返回方法是否 |
| ParseIntegerOnly |
如果此格式将仅将数字分析为整数,则返回 true。 - 或 - 设置是否只应将数字分析为整数。 (继承自 NumberFormat) |
| PeerReference |
|
| PositivePrefix |
获取正前缀。 - 或 - 设置正前缀。 |
| PositiveSuffix |
获取正后缀。 - 或 - 设置正后缀。 |
| RoundingMode |
|
| ThresholdClass |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
| ThresholdType |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
方法
| 名称 | 说明 |
|---|---|
| ApplyLocalizedPattern(String) |
将给定模式应用于此 Format 对象。 |
| ApplyPattern(String) |
将给定模式应用于此 Format 对象。 |
| Clone() |
创建并返回此对象的副本。 (继承自 _Format) |
| Dispose() |
|
| Dispose(Boolean) |
|
| Equals(Object) |
指示其他对象是否“等于”此对象。 (继承自 Object) |
| Format(Double, StringBuffer, FieldPosition) |
设置双精度格式以生成字符串。 |
| Format(Double) |
格式的专用化。 (继承自 NumberFormat) |
| Format(Int64, StringBuffer, FieldPosition) |
设置长格式以生成字符串。 |
| Format(Int64) |
格式的专用化。 (继承自 NumberFormat) |
| Format(Object, StringBuffer, FieldPosition) |
设置数字的格式,并将生成的文本追加到给定的字符串缓冲区。 |
| Format(Object) |
设置对象的格式以生成字符串。 (继承自 _Format) |
| FormatToCharacterIterator(Object) |
设置生成 . 的对象 |
| GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
| JavaFinalize() |
当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
| Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
| NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
| Parse(String, ParsePosition) |
分析字符串中的文本以生成一个 |
| Parse(String) |
分析给定字符串开头的文本以生成数字。 (继承自 NumberFormat) |
| ParseObject(String, ParsePosition) |
分析字符串中的文本以生成一个 |
| ParseObject(String) |
分析给定字符串开头的文本以生成对象。 (继承自 _Format) |
| SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
| ToArray<T>() |
|
| ToLocalizedPattern() |
合成表示此 Format 对象的当前状态的本地化模式字符串。 |
| ToPattern() |
合成表示此 Format 对象的当前状态的模式字符串。 |
| ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
| UnregisterFromRuntime() |
|
| Wait() |
使当前线程等待,直到唤醒它,通常是通过 em 通知/em< 或 >em<interrupted>/em<。><> (继承自 Object) |
| Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
| Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
显式接口实现
| 名称 | 说明 |
|---|---|
| IJavaPeerable.Disposed() |
|
| IJavaPeerable.DisposeUnlessReferenced() |
|
| IJavaPeerable.Finalized() |
|
| IJavaPeerable.JniManagedPeerState |
|
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
| IJavaPeerable.SetPeerReference(JniObjectReference) |
|
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
|
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |