繁体   English   中英

Java可能丢失精度错误

[英]Possible loss of precision error Java

快速提问,我找到了接近此问题的答案,但没有任何帮助。 我希望它在代码的末尾打印出一个百分比,该百分比在小数点后有4个数字,并且当然要使用int作业。 但是使用浮点数给我一个错误。

这段代码:

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()];

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

因此,length参数中的float会被舍入,从而导致精度损失。

您希望在第8行上找到keyboard.nextFloat() ,并在第13行上下面想要keyboard.nextInt()

您不能使用浮点值初始化数组。

float[] a = new float[4]

并不是

float[] a = new float[4.0]

因此,问题出在这里:

float[] numbers = new float[keyboard.nextFloat()];

请改用keyboard.nextInt()。

您正在使用keyboard.nextFloat() (它是一个浮点数)作为数组numbers的长度。 数组的长度必须为int。

那是因为在第8行中,您正在制作一个新数组,并传递一个float作为长度。 由于所有数组都需要整数作为数组长度,因此它将浮点数转换为整数,并产生错误。 您想传递一个整数值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM