java - Java 可能出现精度损失错误

标签 java precision

简单的问题,我找到了与此接近的答案,但没有任何帮助我。我希望它在小数点后有 4 个数字的代码末尾打印出一个百分比,当然,使用 int work work 。但是使用 float 会给我一个错误。

这段代码:

import java.util.Scanner;

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

        Scanner keyboard = new Scanner(System.in);
        System.out.printf("How many numbers will you enter?\n");
        float[] numbers = new float[keyboard.nextFloat()];

        System.out.printf("Enter " + numbers.length + " integers, one per line:\n");

        for (int i = 0; i <= numbers.length - 1; i++) {
            numbers[i] = keyboard.nextInt();
        }

        float sum = 0;
        for (int i = 0; i <= numbers.length - 1; i++) {
            sum += numbers[i];

        }

        System.out.printf("The sum is " + sum + "\n");

        System.out.printf("The numbers are:\n");

        for (int i = 0; i <= numbers.length - 1; i++) {
            float perc = (numbers[i] / sum);
            float perct = (perc * 100);
            System.out.printf(numbers[i] + " which is " + perct + "%% of the sum.\n");
        }
    }
}

给出错误:

HW2johnson_pp4.java:8: possible loss of precision
found   : float
required: int
        float[] numbers = new float[keyboard.nextFloat()];

最佳答案

您无法创建长度为浮点值的 float 数组。也就是说,你不能拥有一个包含 2.7 个元素的数组。

因此长度参数中的 float 正在四舍五入,导致精度损失。

您希望 keyboard.nextInt() 位于第 8 行,而 keyboard.nextFloat() 位于第 13 行下方。

关于java - Java 可能出现精度损失错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9339052/

相关文章:

java - 日历时区表现异常

javascript循环URL点击

java - 用光标、Viewpager 中的数据填充数组

matlab - 在 Matlab 中,如何使用 formatSpec 格式化运算符指定指数中的位数?

math - float 学有问题吗?

java - Jersey 将空列表和单元素列表序列化为数组

java - @ManyToOne 和 @OneToOne 与 @EmbeddedId 的关系

assembly - Intel x86_64 汇编,如何在 x87 和 SSE2 之间移动? (计算 double 的反正切)

floating-point - 128 位 "long-float"有用吗?

c - 从 C 中的 float 转换整数的不一致舍入