Java:Printf(%.2f,arg) 显示 f$ff 而不是 f.ff。什么可能导致这种情况?

标签 java formatting printf

public class Ex51 {
    public static void main(String args[]) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter as many integers as you wish. Enter 0 to stop." + "\nReturns "
                + "\nNumber of negative integers input. " + "\nNumber of positive integers input." + "\nTotal sum."
                + "\nMean.");

        int i = 0;
        int sum = 0;
        int temp = 0;
        int minusCount = 0;
        int plusCount = 0;
        float mean = 0;
        boolean isZero = false;
        do {
            System.out.print("Enter an integer: ");
            temp = input.nextInt();
            if (temp == 0 && i == 0) {
                isZero = true;
                break;
            } else if (temp < 0) {
                minusCount++;
            } else if (temp > 0)
                plusCount++;
            if (temp != 0) {
                i++;
                sum += temp;
                mean = (float) sum / (float) i;
            }
        } while (temp != 0);

        if (!isZero) {
            System.out.printf("\nThe number of positives is: %d" + "\nThe number of negatives is: %d"
                    + "\nThe total is: %d" + "\nThe average is: %.2f", plusCount, minusCount, sum, mean);
        } else {
            System.out.println("No numbers are entered except 0.");
        }
    }
}

这是一个示例运行:

Enter as many integers as you wish. Enter 0 to stop.
Returns
Number of negative integers input.
Number of positive integers input.
Total sum.
Mean.

Enter an integer: 8
Enter an integer: 6
Enter an integer: 20
Enter an integer: -2
Enter an integer: 0

The number of positives is: 3
The number of negatives is: 1
The total is: 32
The average is: 8$00

我的问题就在底部:8$00 当我为 float 指定 %.2f 时,中间没有特殊字符。 对于 arg 平均值,所需的输出将为“8.00”。 我发布了所有代码,因为我认为我会让任何初学者的错误变得相当明显,如果不是,我的设置是否有任何问题。 我在 Eclipse 上使用 jre9 运行它。

最佳答案

“.”之前缺少一个数字例如2.2f。

对于其余的代码,为了初始化,您可以在一行中完成所有操作。最后一个 if 语句是无用的,因为您已经在第一个 if 语句中验证了它是否为 0,因此您不需要这个条件。无论如何你都不会到达那里,因为你的 while 条件是 temp 不为 0。
对于平均值你可以这样做: 平均值=( float )(总和/i); 我认为你只是让你的生活变得复杂。 你可以这样做:

    int temp = 1;
    int positive = 0;
    int negative = 0;
    int i = 0;
    int sum = 0; 
    while (temp != 0)
    {
       System.out.print("Please enter an integer:");
       temp = input.nextInt();
       if(temp == 0)
          //your print statement here
       else if(temp > 0)
         positive ++;
       else
         negative ++;
       sum += temp;
       i++;
    }

关于Java:Printf(%.2f,arg) 显示 f$ff 而不是 f.ff。什么可能导致这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46942520/

相关文章:

java - 当检查在方法内部时,如何避免空指针访问警告?

java - OSGI 的 EJB 持久性问题

c++ - Clang Format多行格式配置错误

c - 为什么我的 printf 打印出错误的值?

c - 将 printf 重定向到 fopencookie

c - 同时打印多个整数

java - 如何定位一个进程而不执行它?

java - 用于存储阻塞线路的集合

xslt - 使用 XSLT/XPath 进行日期格式化

javascript - 以编程方式格式化谷歌图表