2013-11-27 33 views
1

我有一个关于如何使用printf混合多种格式的问题。在我的情况下,我试图给一个数字一定数量的空格,以便它完全适合在表中,我试图限制它允许的小数位数。下面是我有尝试过的printf:使用printf混合多种格式

System.out.printf("%1s%10s%27s%26s%28s%28s1.5d", typeOCar, startingMiles, endingMiles, Distance, gallons, MPG); 

当我执行我的程序,它会显示这样的:

run: 
               Gas & Mileage Calculations 

Car Type   Starting Miles    Ending Miles     Distance     Gallons    Miles/Gallon 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
Toyota Sequoia  15543      15565      22      16.5   1.33333333333333331.5dBUILD SUCCESSFUL (total time: 0 seconds) 

任何帮助将不胜感激。

+0

为什么1.5d?你在哪里使用%x.yf? x和y是数字吗? –

回答

0
  1. 你的最后格式说明应一个f浮点数使用宽度和精度数字:例如,%20.5f
  2. 许多字符串说明符%xs应该是小数点说明符%xd,其中x是格式宽度。
  3. 如果进行此更改,则相应的参数应该是十进制数字,而不是字符串。
  4. 对于传入的参数数量,您有太多的格式说明符。这只不过是基本的数学。计算您的说明符和参数。
  5. 阅读Formatter API的所有细节。
0
import java.text.DecimalFormat; 

然后在你的代码中使用此:

DecimalFormat fmt = new DecimalFormat("00.##"); //0 = numbers before . and # numbers after . 

,并为任意值转换(直接打印出来,例如这里):

System.out.println(fmt.format(varName));