Деление Int: Почему результат 1/3 == 0? - PullRequest
87 голосов
/ 14 января 2011

Я писал этот код:

public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

Результат равен 0. Почему и как мне решить эту проблему?

Ответы [ 15 ]

0 голосов
/ 20 апреля 2019

Попробуйте это:

public static void main(String[] args) {
    double a = 1.0;
    double b = 3.0;
    double g = a / b;
    System.out.printf(""+ g);
}
0 голосов
/ 22 июня 2018
public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

Поскольку 1 и 3 являются целыми числами, результат не округляется, а усекается.Таким образом, вы игнорируете дроби и берете только целые.

Чтобы избежать этого, используйте хотя бы одно из ваших чисел 1 или 3 в виде десятичной формы 1.0 и / или 3.0.

0 голосов
/ 25 января 2017

(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления.Для решения этой проблемы используйте:

public static void main(String[] args) {
        double g = 1.0 / 3;
        System.out.printf("%.2f", g);
    }
0 голосов
/ 14 января 2011

Многие другие не смогли указать на реальную проблему:

Операция только с целыми числами преобразует результат операции в целое число.

Это обязательно означает, чтов результате с плавающей запятой может отображаться как целое число, будет усечено (обрезать десятичную часть).

Что такое приведение (преобразование типов / преобразование типовВы спрашиваете?

Это зависит от реализации языка, но Википедия имеет довольно всеобъемлющее представление, и она также говорит о принуждении , которое является ключевой частью информации вотвечая на ваш вопрос.

http://en.wikipedia.org/wiki/Type_conversion

0 голосов
/ 14 января 2011

Do "double g = 1.0 / 3.0;"вместо этого.

...