前几天想在Java中用格式化输出,多亏rollingpig、zlzj2010等几位老大提示,现在我用text package中的NumberFormat和DecimalFomat实现了一把,给大家show一下,请多指教。
简单说明:
a.格式描述符:
1. L或l - 使数字左对齐(缺省是右对齐)
2. C或c - 使数字居中对齐(缺省是右对齐)
3. X或x - 显示数字为十六进制(缺省是十进制)
4. B或b - 显示数字为八进制(缺省是十进制)
5. ,(半角逗号)- 千位分隔符
6. S或s - 显示数字为科学记数法
7. Z或z - 用零填空位(缺省是空格)
8. w.d (两个整数用半角句号隔开)- 指定输出域宽及精度
b. "fillChar"是填空位符(缺省为空格)
--你可以用MyOut.fillChar = '*'或'$'来定义你自己的空位符
举例:
println(123.45678, "8.3L") -> 123.457(左对齐占八位)
println(123.45678, "10.3cs") -> 1.235E2 (居中占十位)
println(1234567, ",10") -> 1,234,567(右对齐占十位)
// class MyOut
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/* Thanks to Prof. H.Roumani.(He is my java teacher, who is great.)
*
* The format methods receive the value to be formatted (which can
* be of any type) and a format descriptor: a string that contains
* one or more of the following flags in any order and in any case:
*
* L:
* By default, all values are aligned right within their field
* width. If this flag is specified, left alignment is used instead.
* This flag has no effect if the field width is not specified.
* C:
* By default, all values are aligned right within their field
* width. If this flag is specified, centre alignment is used instead.
* This flag has no effect if the field width is not specified.
* X:
* By default, all numeric values are shown in the decimal system.
* If this flag is specified, hexadecimal is used instead (showing
* IEEE-754 for real's). This flag has no effect if the value is not
* numeric.
* B:
* By default, all numeric values are shown in the decimal system.
* If this flag is specified, binary is used instead (showing
* IEEE-754 for real's). This flag has no effect if the value is not
* numeric.
* ,:
* By default, all numeric, base-10 values are shown without a
* thousand-separator. If this flag is specified, a comma is inserted
* in the integer part of the number to separate thousands. This flag
* has no effect if the value is not numeric, is not in decimal, or if
* the scientific notation is used.
* S:
* By default, all numeric, base-10 values are shown as an integer part
* followed by a mantissa, or fractional part. If this flag is specified,
* scientific notation is used: One digits (possibly preceded by a minus
* sign) followed by a decimal point, a mantissa, the letter 'E' and an
* eXPonent. This flag has no effect if the value is not numeric or is not
* in decimal.
* Z:
* By default, all integer, base-10 values are shown with leading or
* trailing spaces to fill the specified field width. If this flag is
* specified, the field is filled with leading zeros instead. This flag is
* only meaningful if the value is a base-10 integer, the width is specified,
* and the thousand-separator flag is not specified.
* w.d (two integers separated by a period):
* w is the desired width of the entire returned string, after formatting.
* If the formatted string is shorter than w, it will be padded by leading
* and/or trailing spaces (or some other fill character) depending on the
* requested alignment (left, right, or centre). d is the desired number of
* decimals and is meaningful only if the value is a base-10 real (in standard
* or scientific notation). Rounding to the specified number of decimals is
* done using conventional rules but the case of 5 is handled by rounding to
* the nearest even number (same as the rint method of the Math class). Note
* that you can specify only w (in that case don't include the period), or
* only d (in this last case do precede it by the period).
*/