2013-10-24 143 views
0

我有以下代码和我的输出正在工作,但我不知道如何使用printf来使此输出(66.67%),而不是66.66666666666667%,只是为了举例。任何帮助表示赞赏!Printf格式化小数位

public static void evenNumbers(Scanner input) 
{ 
    int numNums = 0; 
    int numEvens = 0; 
    int sum = 0; 

while (input.hasNextInt()) 
    { 
    int number = input.nextInt(); 
     numNums++; 
    sum += number; 
    if (number % 2 == 0) 
    { 
     numEvens++; 
    } 
    } 
    System.out.println(numNums + " numbers, sum = " + sum); 
    System.out.println(numEvens + " evens " + (100.0* numEvens/numNums + "%")); 



} 

谢谢

+3

使用[的printf(http://www.cs.gsu.edu/csc2010/f13/assignments/h4/printf.pdf) –

回答

6

可以使用printf的修改%.2f得到的只有两位小数。

3

使用String.format%.2f

String.format("%d evens %.2f%%", numEvens, 100.0 * numEvens/numNums); 
+0

谢谢!!我明白了,现在显然我需要说8个平均值(66.67%),在括号中插入哪里会更好? System.out.printf(“%d evens%.2f %%”,numEvens,100.0 * numEvens/numNums); – user2268587

+0

你会写''%d evens(%.2f %%)“'。也许[本文](http://javarevisited.blogspot.de/2012/08/how-to-format-string-in-java-printf.html)可以帮助您理解Java中的字符串格式。 –

0

您可以在答案中使用Math.round在打印前:

 System.out.println(numEvens + " evens " + Math.round((100.0* numEvens/numNums)*100)/100.0d + "%")); 
0

这里不要使用printf。相反,请使用MessageFormatDecimalFormat.getPercentInstance()

String format = "{numbers: {0, number, integer}," + 
       " sum: {1, number, integer}\n" + 
       "evens: {2, number, integer}," + 
       " {3, number, percent}" 
String message = MessageFormat.format(format, 
    new Object[]{numNums, sum, numEvens, ((double) numEvens)/ numNums)}); 
System.out.println(message);