public class Main {
public static void main(String[] args) {
System.out.println(convertCelsiusToFahrenheit(41));
}
public static double convertCelsiusToFahrenheit(double celsius) {
double a = 9.0/5.0;
return a * celsius + 32;
}
}
Почему при присваивании переменной double a = 9.0/5.0 она дробная, а если без дробной части то int? Ведь я же изначально написал что а - double. Как в паскале если пишешь переменная real - считает с дробной частью, int - без дробной с округлением по правилам математики. А тут так не работает?Vitaly
9 уровень
Почему при присваивании переменной double a = 9.0/5.0 она дробная, а если без дробной части то int?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Олександр Шкурат
14 января 2020, 11:44
Потому что делением 9/5 Java воспринимает результат как значение int и отсекает то, что после запятой. Чтобы результат оказался дабл, нужно чтобы хотя бы одно из чисел было дабл.
0
JustinianJudge в Mega City OneMaster
10 января 2020, 07:49решение
Ты изначально указал что тип переменной является a.
В эту переменную джава положит какое-то значение ТОЛЬКО ПОСЛЕ проведения операции.
На момент вычисления 9 / 5 джава вообще без понятия куда она это будет класть - в переменную int или дабл.
В данном примере, числа 9 и 5 являются числовыми литералами.
По умолчанию, целочисленные литералы (без дробной части) являются типом int
int 9 поделить на int 5, будет 1
То есть сколько целых раз 5 влезет в 9.
Результат операции при участии int и int, это тоже тип int. Это нужно в джаве чтобы не путаться,
и не было ошибок, иначе :
int a = 6 /3 ; ок
int b = 6 /4; а здесь что делать? мы не можем дабл положить в int и рандомно отбрасывать дробную часть, а когда это переменные a / b? программист вообще может не понять какой тип результата
Поэтому инт на инт, результат инт и только потом, как правая часть будет вычислена, джава пойдет смотреть что там слева.
А слева у нас тип дабл.
Значит оно автоматически приведет к даблу (путем присоединения дробной части) и
d будет равно 1.0
Если же нам, вдруг нужно работать с числами как с вещественными, и не терять точность вычислений, мы это долнжы задать ЯВНО.
либо
либо
либо
либо
Что происходит здесь.
Если джава видит, что один из операндов является вещественным числом (имеет дробную часть), он АВТОМАТИЧЕСКИ приводит другое число тоже к вещественному и результат операции будет вещественное число.
И результат 1.8 спокойно себе ложится в переменную.
Это сделано чтобы не терять точность вычислений.
Это нужно на многие порядки реже, с интом программисты работают чаще, поэтому вот такие правила
+5
Vitaly
10 января 2020, 07:37
И как регулировать знаки после запятой тогда?
0