如何将数字变为字符串格式化输出?
如:
2 -> "002"
99 -> "099"
12.3 -> "12.30"
12.345 -> "12.34"
问题点数:20、回复次数:1Top
1 楼ycats(加菲猫)回复于 2001-12-06 11:49:02 得分 20
public class DecimalFormat
extends NumberFormat
DecimalFormat 是 NumberFormat 的格式化十进制数值的具体子类。 该类允许有不同的参数,并本地化为 Western、Arabic 或 Indic 数字。
通常,使用一个 NumberFormat 工厂方法,如 getInstance 可以获得特定语言环境 ( 包括缺省的语言环境 )的正确的 NumberFormat。然后可以修改它 ( 当然测试以确保它是一个 DecimalFormat 之后进行 !)。
为了使分析能够区分正负数,前缀或后缀必须有所不同。 如果数字、千进制或小数分隔符相同,或者前缀或后缀中发生了上述情况,分析将是不可靠的。
特殊情况:
NaN 作为一个数字格式化,典型的例子是 \\uFFFD。
正/负无穷大作为一个数字格式化,典型的例子是 \\u221E, 加正负前缀 / 后缀。
注意: 该类是为普通的用户设计;对于很大或很小的数,请使用可以表示指数值的格式。
示例:
// normally we would have a GUI with a menu for this
Locale[] locales = NumberFormat.getAvailableLocales();
double myNumber = -1234.56;
NumberFormat form;
// just for fun, we print out a number with the locale number, currency
// and percent format for each locale we can.
for (int j = 0; j <3; ++j) { system.out.println("format"); for (int i="0;" i < locales.length; ++i) { if (locales[i].getcountry().length()="=" 0) { // skip language-only continue; } system.out.print(locales[i].getdisplayname()); switch (j) { default: form="NumberFormat.getInstance(locales[i]);" break; case 1: form="NumberFormat.getCurrencyInstance(locales[i]);" break; case 0: form="NumberFormat.getPercentInstance(locales[i]);" break; } try { system.out.print(": " + ((decimalformat)form).topattern() + " -> " + form.format(myNumber));
} catch (IllegalArgumentException iae) { }
try {
System.out.println(" -> " + form.parse(form.format(myNumber)));
} catch (ParseException pe) { }
}
}
以下显示了模式的结构。
pattern := subpattern{;subpattern}
subpattern := {prefix}integer{.fraction}{suffix}
prefix := '\\u0000'..'\\uFFFD' - specialCharacters
suffix := '\\u0000'..'\\uFFFD' - specialCharacters
integer := '#'* '0'* '0'
fraction := '0'* '#'*
符号:
X* 0 个或多个 X 实例。
(X | Y) X 或 Y。
X..Y X 到 Y 之间的任何字符。
S - T 在 S 中且不在 T 中的字符。
第一种子模式为了表示正数。第二种 ( 可选的 ) 子模式为了表示负数。 ( 在两种情况下,',' 可以出现在整数部分中 -- 它过于不规整不能在 BNF 中指示。)
下面是用在部分子模式中的特殊字符以及它们的使用说明。
符号含义
0 一个数字
# 一个数字,不包括 0
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
- 缺省负数前缀。
% 乘以 100 和作为百分比显示
? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用
国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代
替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
注意
如果没有明确的负数子模式 - 将在正数形式上加前缀。 即,单独的 "0.00" 与 "0.00;-0.00" 等价。
非法的模式,如 "#.#.#" 或在同一模式中将 '_' 和 '*' 混在一起,将引起抛出 IllegalArgumentException 异常。 在消息 IllegalArgumentException 中可以找到字符串中错误发生的地方。
分组分隔符通常用来分隔千位,但在某些国家中用来分隔万位。 在分组字符之间的位数数字是固定的,如 100,000,000 或 1,0000,0000。 如果提供了具有多分组字符的模式,整数中上一个和最后一个数字之间是使用的同一个数字。所以 "#,##,###,####" == "######,####" == "##,####,####"。
当调用 DecimalFormat.parse(String, ParsePosition) 且分析失败时,将返回 null 对象。分析位置没有改变也表示分析期间出现了错误。当调用便捷的方法 DecimalFormat.parse(String) 且分析失败时,将抛出 ParseException 异常。
该类只处理本地化的数字,从 0 到 9 的 10 个数字在 Unicode 中是连续的。其它的数字集合 ( 如上标 ) 需要不同的子类。
参见:
Format, NumberFormat, ChoiceFormat
--------------------------------------------------------------------------------
Top




