Jestem nowy w Javie i uczę się pierwszych kroków.

Odrabiając pracę domową, mam problem z wydrukowaniem sumy za pomocą liczb zmiennoprzecinkowych:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Francesco");
        int myFirstNumber = (10 + 5) + (2 * 10);
        int mySecondNumber = 12;
        int myThirdNumber = myFirstNumber * 2;
        int myTotal = myFirstNumber + mySecondNumber + myThirdNumber;
        float  myLastOne = myTotal/10;
        System.out.println(myTotal);
        System.out.println(myLastOne);
    }
}

Czym drukuje Java 11.0:

Hello, Francesco
117
11.0

Ale zamiast tego powinien wypisać 11.7:

Hello, Francesco
117
11.7

Wiem, że problem tkwi w wierszu numer 8, w którym używam float, próbowałem nawet użyć double, ale mam ten sam wynik

-1
Francesco Mantovani 2 kwiecień 2020, 12:10

4 odpowiedzi

Najlepsza odpowiedź

Dzieje się tak z powodu int-division, ponieważ 10 to int. Musisz dodać przyrostek f , aby określić, że jest to liczba zmiennoprzecinkowa

float myLastOne = myTotal / 10f;
System.out.println(myLastOne); // 11.7

To działałoby również z double

double myLastOne = myTotal / 10.0;
System.out.println(myLastOne); // 11.7
3
azro 2 kwiecień 2020, 09:13

Twoje pytanie dotyczy oświadczenia

float  myLastOne = myTotal/10;

Jeśli myLastOne, dlaczego nie robi dzielenia zmiennoprzecinkowego, ale zamiast tego obcina wynik dzielenia.

Powodem jest to, że chociaż zmienna myLastOne jest zmiennoprzecinkową, ten wiersz kodu najpierw ocenia wyrażenie myTotal/10. Ponieważ myTotal i 10 są liczbami całkowitymi, używa dzielenia liczb całkowitych. Daje to wynik w postaci liczby całkowitej 11, który następnie przechowuje w zmiennej myLastOne zmiennoprzecinkowej, rzutowanej na 11.0.

Aby Java używała dzielenia zmiennoprzecinkowego, a właśnie tego chcesz, albo myTotal albo liczba, przez którą dzielisz, musi być liczbą zmiennoprzecinkową.

float  myLastOne = (float)myTotal/10;

int float = myFirstNumber + mySecondNumber + myThirdNumber;
float  myLastOne = myTotal/10;
1
Marlin Pierce 2 kwiecień 2020, 09:24

W Javie int / int tworzy int. int * int tworzy int. int + int tworzy int. int - int tworzy int.

Najpierw musisz rzucić int, aby unosić się.

float  myLastOne = (float)myTotal/10;

Lub

float  myLastOne = (float)myTotal/10.0;
1
Jyotirmay Kumar Jha 2 kwiecień 2020, 09:28

Zarówno myTotal, jak i 10 są liczbą całkowitą, więc Java uważa, że powinna wykonać dzielenie liczb całkowitych. Ponieważ wynik jest liczbą całkowitą, 11.7 zostaje obcięte do 11 (czyli 11.0 w liczbie zmiennoprzecinkowej).

Aby wyprowadzał liczbę zmiennoprzecinkową (dzielenie zmiennoprzecinkowe), zdefiniuj co najmniej jeden z operandów jako zmiennoprzecinkowy.

float myLastOne = (float)myTotal/10;
float myLastOne = myTotal/10f;
float myLastOne = (float)myTotal/10f; //All of these work
0
VerdeVai 2 kwiecień 2020, 10:10