Java 同时设置字段填充长度和小数精度
是否可以在设置小数精度的同一行中设置字段填充的长度?我希望Java 同时设置字段填充长度和小数精度,java,format,Java,Format,是否可以在设置小数精度的同一行中设置字段填充的长度?我希望firstPlaceTime以3个小数点显示,比如8.250而不是8.25。可能类似于%8s%3f或%8s.3f System.out.format("%-10s%1s%-18s%1s%8s%1s%16s%-10s","Level " + level, "| ", firstPlaceName, "| ", firstPlaceTime + "s
firstPlaceTime
以3个小数点显示,比如8.250而不是8.25。可能类似于%8s%3f
或%8s.3f
System.out.format("%-10s%1s%-18s%1s%8s%1s%16s%-10s","Level " + level, "| ", firstPlaceName, "| ", firstPlaceTime + "s ", "|", timeGain + "s ahead |", " " + numberOfRunners + " runners");
此代码显示了一种构建格式字符串的方法,以及使用
%8.3f
显示双精度文本的方法
public static void main(String[] args)
{
String level = "Beginning";
String firstPlaceName = "TheWinner!";
double firstPlaceTime = 180.234534D;
double timeGain = 10.2D;
int numberOfRunners = 10;
StringBuilder sb = new StringBuilder();
sb.append("Level %-10s"); //the level
sb.append("|"); //divider
sb.append("%-18s"); //name of winner
sb.append("|"); //divider
sb.append("%8.3f s "); //winning time
sb.append("|"); //divider
sb.append("%8.3f s ahead"); //time gain
sb.append("|"); //divider
sb.append("%5d runners"); // # of runners
System.out.format(sb.toString(),
level,
firstPlaceName,
firstPlaceTime,
timeGain,
numberOfRunners);
}
输出:
Level Beginning |TheWinner! | 180.235 s | 10.200 s ahead| 10 runners
编辑:详细说明评论中的问题。OP表示有人试图使用%8.3f
,并收到一个格式错误firstPlaceTime
是双精度编码。但是,参数指定为:
...,firstPlaceTime + "s ",...
当+“s”
作为参数提供时,它将被转换为字符串
,然后传递给.format()
。作为字符串
,通过%8.3f
规范进行格式化将不会是双重
。这是建议将文本移动到格式规范中而不是尝试的部分原因
参数中的各种字符串连接。是否
firstPlaceTime
已经是字符串?在这种情况下,您需要在将其传递到.format
之前对其进行格式化。如果它是一个double
(或float
),那么您可以使用%8.3f
。旁白:为什么要将格式与字符串串联混合?只需将分隔符和文本放在格式本身中。@KevinOfirstPlaceTime
是双精度的。我尝试使用%8.3f
,但它抛出错误IllegalFormatConversion。我不熟悉在格式中添加分隔符和文本。这似乎是一种更好的格式,谢谢你给我展示。只是好奇,为什么8.3f
在我的原始版本中不起作用呢?@JoshCorreia,请看答案中的详细说明。但基本上,通过指定firstPlaceTime+“s”
,该参数成为字符串,不再是双精度参数。