簡體   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