Входни цели числа int, калкулиране на формула с double. Защо не може?
Здравейте,
Въпросът ми може би вече е ясен.
В този пример, при входни числа 8, 13, 7:
double b1 = double.Parse(Console.ReadLine());
double b2 = double.Parse(Console.ReadLine());
double h = double.Parse(Console.ReadLine());
double area = (b1 + b2) * h / 2;
Console.WriteLine(area);
резултатът ще бъде 73,5.
Защо резултатът е цяло число 73 при:
int b1 = int.Parse(Console.ReadLine());
int b2 = int.Parse(Console.ReadLine());
int h = int.Parse(Console.ReadLine());
double area = (b1 + b2) * h/2;
Console.WriteLine(area);
Предварително благодаря на тези които ще ми обърнат внимание. :)
Щях да се съглася с теб, но си спомних, че го бях пробвала с друго изчисление предната седмица.
Не можах обаче да ти отговоря веднага защото трябваше да видя каква беше разликата в предишната задача в която съм получила дробно число от входни int.
Така и не съм стигнала до това, имах други ангажименти.
Днес тръгнах да се занимавам с домашни и попаднах на следното:
ТОП 10 причини за FAIL на единичен тест в Judge системата
Там NikolayLiubomirov пише:
"6. Делителят е int, делимото също е int, а ние очакваме резултатът да е дробно число.
Пример:
вместо
."
Това ми спестява времето за търсене на предишният успешен пример и ми отговаря напълно на въпроса:
Добавих в моята задача една запетая и една нула на делителя:
int b1 = int.Parse(Console.ReadLine());
int b2 = int.Parse(Console.ReadLine());
int h = int.Parse(Console.ReadLine());
double area = (b1 + b2) * h/ 2.0;
Console.WriteLine(area);
Тадаааааа! Резултат: 73.5
2.0 не е int, така че отговорът отгоре си е за съгласяване :)
C# както всички дот нет езици се компилира до intermediate language. Това ни позволява в един проект да използваме код писан на няколко различни езика, например c# и visual basic. По време на компилация се правят някои оптимизации и ако е необходимо(и възможно) някои данне се обръщат в друг тип така че програмата да може да работи. В примера
double area = (b1 + b2) * h / 2.0
b1, b2 и h са от тип int, 2.0 е от тип double. Не е възможно да се извърши изчисленито понеже имаме различни типове данни, за това дот нет компилатора по подразбиране ще обърне стойностите на b1, b2 и h в double и ще получим резултат от тип double.