2010-12-27 1 views
2

У меня есть эта проблема с начала с резкой книгой это для преобразования между Фаренгейтом и Цельсия.Конверсия между Фаренгейтом и Цельсия ВЫПУСК

private void button1_Click(object sender, EventArgs e) 
{ 
    float fahr, cel; 
    if (Celsius.Checked == true) 
    { 
     fahr = float.Parse(textBox1.Text); 
     cel = (5/9)*(fahr-32); 
     richTextBox1.Text = "The Degree in Celsius is:" + cel.ToString() + Environment.NewLine + "cool isn't it!?"; 
    } 
    else if (Fahrenheit.Checked == true) 
    { 
     cel = float.Parse(textBox1.Text); 
     fahr = ((9 * cel)/5)+ 32; 
     richTextBox1.Text = "The degree in Fahrenheit is:" + fahr.ToString() + Environment.NewLine + "cool is it!?"; 
    } 

, когда я хочу, чтобы получить по Цельсию от Фаренгейта он продолжает давать мне 0, даже если формула оказывается верным для меня. что здесь не так?
, потому что я думаю, что проблема лежит здесь:

 if (Celsius.Checked == true) 
    { 
     fahr = float.Parse(textBox1.Text); 
     cel = (5/9)*(fahr-32); 
     richTextBox1.Text = "The Degree in Celsius is:" + cel.ToString() + Environment.NewLine + "cool isn't it!?"; 

может быть, я что-то не так с приказом Ops, но я думаю, что это правда? спасибо за помощь.

ответ

3

Попробуйте поставить другой бросок там только, чтобы убедиться, как это:

cel = ((float)5/9)*(fahr-32); 

Скорее всего 5/9 оценить, как Интс и дает 0. Другой вариант будет выглядеть так:

cel = (5f/9f)*(fahr-32); 
+0

Это сработало, это cel = ((float) 5/9) * (fahr-32); сработали? обрабатывает ли он 5/9 как фракцию (рациональное число), если числитель меньше знаменателя, или если он является дробью с целыми числами только как в num, так и в значении? – user527825

+0

В операции деления по крайней мере один операнд должен иметь тип float, чтобы весь результат рассматривался типа float. Размер чисел не имеет значения. Используя (float) 5, я фактически конвертирую целое число 5 в значение с плавающей точкой 5.0, затем разделим его на целое число 9. Так как 5.0 теперь явно плавает, результатом будет число с плавающей точкой. –

+0

Небольшая записка; все это обрабатывается компилятором, а не средой исполнения - нет времени выполнения. (float) 7 идентична 7F –

7

Попробуйте

5.0F/9.0F 

Вы в противном случае с использованием целочисленной арифметики, где 5/9 является нулю.

+0

о c^& b, у меня не было проблем с C++ по этому вопросу Strange, я попробую. Но подождите, пока он отлично справится с этим cel = (5/9) * (fahr-32); – user527825

+1

... или вот так. –

+1

er, языки разные! –

Смежные вопросы