我想在Java中格式化3位浮点数,以便它们垂直排列,使得它们看起来像:
123.45
99
23.2
45
Run Code Online (Sandbox Code Playgroud)
当我使用DecimalFormat类时,我接近,但是当项目有1或2位数时我想插入空格.
我的代码:
DecimalFormat formatter = new java.text.DecimalFormat("####.##");
float [] floats = [123.45, 99.0, 23.2, 45.0];
for(int i=0; i<floats.length; i++)
{
float value = floats[i];
println(formatter.format(value));
}
Run Code Online (Sandbox Code Playgroud)
它产生:
123.45
99
23.2
45
Run Code Online (Sandbox Code Playgroud)
如何打印它以使除第一行以外的所有行都移过1个空格?
Rea*_*wTo 17
试试String.format()(JavaDoc):
public static void main(String args[]){
String format = "%10.2f\n"; // width == 10 and 2 digits after the dot
float [] floats = {123.45f, 99.0f, 23.2f, 45.0f};
for(int i=0; i<floats.length; i++) {
float value = floats[i];
System.out.format(format, value);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
123.45
99.00
23.20
45.00
Run Code Online (Sandbox Code Playgroud)
通过一些正则表达式字符串替换,这是微不足道的.
formatter.format(f).replaceAll("\\G0", " ")
Run Code Online (Sandbox Code Playgroud)
这是在上下文中:( 另见ideone.com):
DecimalFormat formatter = new java.text.DecimalFormat("0000.##");
float[] floats = {
123.45f, // 123.45
99.0f, // 99
23.2f, // 23.2
12.345f, // 12.35
.1234f, // .12
010.001f, // 10
};
for(float f : floats) {
String s = formatter.format(f).replaceAll("\\G0", " ");
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
它使用DecimalFormat做大部分格式(零填充,可选的#,等等),然后使用String.replaceAll(String regex, String replacement)替换所有前导零空间.
正则表达式是\G0.也就是说,0前面\G是"前一场比赛的结束"锚点.该\G也出现在字符串的开头,这是什么让前导零(并且没有其他零)进行匹配,并用空格代替.
将模式\G0写为"\\G0"Java字符串文字的原因是因为反斜杠是转义字符.也就是说,"\\"是一个长度为1的字符串,包含反斜杠.
请注意,我使用了for-each循环,这样可以使代码更加简单,从而提高可读性并最大限度地减少出错的可能性.我也不停的浮点变量float,使用f后缀为它们申报为float文本(因为他们是double在默认情况下以其他方式),但它需要说,通常,你应该更喜欢double到float.
double来float.只需更改第一行,将“#”字符替换为“0”。它将解决您的问题并生成具有相同长度的格式化数字,如Java API中所述。使用这种方法,您的行将以附加的“0”数字开始和结束(例如 099.00):
DecimalFormat formatter = new java.text.DecimalFormat("0000.00");
Run Code Online (Sandbox Code Playgroud)
如果您想要正确的对齐方式而没有这些无用的“0”,则必须创建自己的格式化方法:它在本机 Java API 中不存在。
| 归档时间: |
|
| 查看次数: |
23545 次 |
| 最近记录: |