Я не понимаю, что это значит под "возможным преобразованием потерь с двойного на int" - PullRequest
0 голосов
/ 12 марта 2019
public class MyClass {
    public static void main(String args[]) {
        int n,h,w,i;
        double t;
        h = 40;
        w = 5;
        i = 2;
        t = 0.22;
        n=(h*w-i)-t*(h*w-i);
        System.out.println(n);
    }
}

В строке 13 написано "/MyClass.java:9: ошибка: несовместимые типы: возможное преобразование с потерями из двойного в целое число n = (h wi) -t (h * wi);", Что это значит и как мне это исправить?

1 Ответ

0 голосов
/ 12 марта 2019

Что это значит: если t является двойным, выражение (h*w-i)-t*(h*w-i) возвращает двойное (154.44). Тем не менее, когда n является int, вы пытаетесь присвоить двойное значение переменной int. Это приводит к ошибке, так как это приведение не выполняется Java неявным образом, так как это приведет к потерям (в спецификации это называется сужающим примитивным преобразованием: https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html). «Сужающееся примитивное преобразование может потерять информацию об общей величине числового значения, а также может потерять точность и диапазон». Значит: вы потеряете информацию о десятичных дробях.

Как с этим бороться: зависит от желаемого результата: - Вы хотите двойное возвращаемое значение => сделать n двойной переменной - Вы хотите, чтобы возвращаемое значение типа int => cast (h*w-i)-t*(h*w-i) to int. Либо заставить его int: n=(int)(…). Или сделайте его более прозрачным, явно используя (int)Math.round() / .floor() / .ceil() (https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...