Metoda publică statică dublă? [duplicat] (Programare, Java)

Azaria Gebo a intrebat.
import java.util.Scanner;

public class test {

    private static int number1 = 100;
    private static int number2 = 1;

    public static double avgAge() {

        return (number1 + number2) / 2;
    }

    public static void main(String[] args) {

        System.out.println("Average number: " + test.avgAge());
    }   
}

De ce test.avgAge() = 50.0 în loc de 50.5? Există o modalitate de a scoate 50.5 în loc de 50.0?

5 răspunsuri
CompuChip

Calculul se face ca un calcul de numere întregi.

Dacă înlocuiți 2 cu 2,0 veți obține 50,5. Vă recomand să adăugați un comentariu la acea linie pentru a explica acest lucru viitorilor cititori. în mod alternativ, puteți face explicit cast la un dublu:

((double) (number1 + number2)) / 2

shankar

Doar înlocuiți această funcție

import java.util.Scanner;

public class test {

private static int number1 = 100;
private static int number2 = 1;

public static double avgAge() {

    return (number1 + number2) / 2.0;
}

public static void main(String[] args) {

    System.out.println("Average number: " + test.avgAge()); //Average number: 50.5
}   
}

Dar eu nu sunt o clasă Wrapper

Este din cauză că folosiți ints pe parcursul calculului înainte de a-l returna ca un double. Faceți următoarele:

private static double number1 = 100.0;
private static double number2 = 1.0;

Schimbați-le în double. De asemenea, înlocuiți 2 cu 2,0:

    return (number1 + number2) / 2.0;

Citiți mai multe despre ints și doubles aici:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

coding_idiot

Asta din cauza promovării tipului.

Dacă într-o operație, oricare dintre operanzi este un dublu, atunci rezultatul este promovat la dublu.

Deoarece aici toți operanzii sunt ints, împărțirea are ca rezultat un int.

Promovarea tipului

L Q
return ((double)(number1 + number2)) / 2;

Tags: