2015-10-02 3 views
2
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Fahrenheit_to_Celsius_Converter 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     {//Prompt user to enter a temperature 
      Console.WriteLine("Please enter the temperature in fahrenheit you want to convert"); 
      //Sets variable fahr to the number entered 
      string fahr = Console.ReadLine(); 
      //Just for testing debugging purposes displays what data is stored in fahr. 
      Console.WriteLine(fahr); 
      //Initializes an integer fahrint 
      int fahrint; 
      fahrint = int.Parse(fahr); 
      //Just for testing debugging purposes displays what data is stored in fahrint. 
      Console.WriteLine(fahrint); 
      //Initializes an integer celcius 
      decimal celcius; 
      //Does the calculation that stores to a variable called celcius 
      celcius = ((fahrint) - 32) * (5/9); 
      //At this point the celcius variable print 0. It should print 5 if 41 is entered 
      Console.WriteLine(celcius); 
      string celciusstring; 
      celciusstring = celcius.ToString(); 
      Console.WriteLine(celciusstring); 



     } 
    } 
} 

Я прокомментировал, что происходит в моем коде, насколько это возможно. Программа хранит Fahrenheit как строку и преобразует ее в десятичный штраф. Однако celcius = 0 вместо правильного числа в точке, где celcius = celcius = ((fahrint) - 32) * (5/9) ;. Я знаю, что я неправильно указал celcius, но я не думаю, что это повлияло на код. Любые решения?Почему моя программа C# возвращает 0?

Спасибо!

ответ

6

Целое подразделение. 5/9 всегда 0

(fahrint - 32) * (5/9) 
        ^^^ 

Вы должны бросить хотя бы одно из этих значений в decimal:

celcius = (fahrint - 32) * (5M/9); 
//5 is of type Decimal now 
+0

Это странно объявить '5' как' double' а затем произведите результат как десятичное. Если вы объявляете 5 как «десятичную», вам не потребуется бросок. –

+0

Хороший звонок. Я не проверял окончательный тип. Используйте десятичную, а не двойную. – Jonesopolis

+1

Не используйте десятичные числа для вычислений. Используйте двойной. (Десятичный лучше всего подходит для финансовых расчетов.) –

2

Все буквальные номера типа integer по умолчанию. При выполнении целочисленного деления результат округляется до ближайшего целого числа, в этом случае 0. Таким образом, результат всегда равен 0.

Вы должны объявить один из тех, кто как decimal, чтобы заставить его не выполнить целочисленное деление с помощью m:

celcius = ((fahrint) - 32) * (5m/9); //5 is now a decimal 
Смежные вопросы