Умножение значений с плавающей запятой возможно с потерями преобразования из двойного в число с плавающей запятой

У меня есть эта проблема, когда я должен преобразовать километры в мили. Я начинающий программист, так что терпите меня.

Вот мой код:

import java.util.Scanner;

public class problem1 {
    public static void main (String args[]) {
        float m;
        float km;

        Scanner input=new Scanner(System.in);

        System.out.print("Please enter a distance in kilometers:");
        km=input.nextFloat();
        m=km*0.621371;
        System.out.println("This is equal to: "+m);
    }
}

Это дает мне сообщение об ошибке:

Incompatible types:possible lossy conversion from double to float.

person Oreo    schedule 12.02.2015    source источник
comment
СОВЕТ: Числа с плавающей запятой по умолчанию имеют тип double.   -  person Rohit Jain    schedule 12.02.2015
comment
если вы хотите использовать float, используйте f в конце, например 0,621371f   -  person Anil    schedule 12.02.2015
comment
Я предполагаю, что вы имеете в виду преобразование с потерями? Вы пробовали загуглить ошибку? stackoverflow.com/questions/21645783/   -  person Adrian Leonhard    schedule 12.02.2015
comment
В дополнение к тому, что вы узнаете из ответов, также узнайте, что соглашения по форматированию и кодированию очень важны для общения с вашими коллегами-программистами (включая тех, кто будет читать ваш код в будущем). Имена классов должны начинаться с заглавной буквы, а блоки кода должны иметь правильный отступ.   -  person RealSkeptic    schedule 12.02.2015


Ответы (3)


Вы пытаетесь установить double в переменную float

Чтобы исправить, измените эту строку

m=km*0.621371;

to

m=km*0.621371f;
person ControlAltDel    schedule 12.02.2015
comment
Использование магических чисел считается плохой практикой программирования. Только глядя на этот код, вы не можете сказать, что означает 0,621371? - person Sigismundus; 12.02.2015

Значение 0.621371 является литералом double, поэтому значения km повышаются до double при умножении. Сохранение продукта double обратно в m будет преобразованием, которое может привести к потере данных (с double на float).

Чтобы сохранить данные как float, используйте литерал float с f на конце:

m=km*0.621371f;

Обычно для результатов достаточно double, поэтому вы также можете просто изменить типы данных m и km на double.

person rgettman    schedule 12.02.2015

Вам нужно определить постоянную переменную как число с плавающей запятой, так как km читается как число с плавающей запятой.

final float KM_TO_ML = 0.621371F;
m = km * KM_TO_ML;
person Sigismundus    schedule 12.02.2015