0

I end up getting -0.944444444444444 when I want it to be -0.94 Assuming the entered temperature is 30.3 and clicking Fahrenheit to Celsius.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TemperatureConverter
{
    public partial class FrmTemperature : Form
    {
        public FrmTemperature()
        {
            InitializeComponent();
        }

        private void btnCalcFahrenheit_Click(object sender, EventArgs e)
        {
            lblFahrenheit.Text = Convert.ToString(9.0/5.0 * Convert.ToDouble(txtTemperature.Text) + 32.0);
        }

        private void btnCalcCelsius_Click(object sender, EventArgs e)
        {
            lblCelsius.Text = Convert.ToString(5.0/9.0*(Convert.ToDouble(txtTemperature.Text) - 32.0));
        }
    }
}
Chibbie
  • 25
  • 5

2 Answers2

2

Use ToString method like following:

(5.0/9.0*(Convert.ToDouble(txtTemperature.Text) - 32.0)).ToString("0.00");

I also suggest you parse the temperature text as a separate step to show user errors.

e.g.

double temp;
if (double.TryParse(txtTemperature.Text, out temp))
    lblCelsius.Text = (5.0/9.0*(temp - 32.0)).ToString("0.00");
else
    // Show error to user
Bishoy
  • 705
  • 9
  • 24
1

Perhaps use string.Format() or string interpolation (new feature in C# 6.0).

Using string.Format()

private void btnCalcFahrenheit_Click(object sender, EventArgs e)
{
    var fahrenheit = 9.0/5.0 * Convert.ToDouble(txtTemperature.Text) + 32.0;
    lblFahrenheit.Text = string.Format("{0:N0}", fahrenheit);
}
private void btnCalcCelsius_Click(object sender, EventArgs e)
{
    var celsius = 5.0/9.0*(Convert.ToDouble(txtTemperature.Text) - 32.0);
    lblCelsius.Text = string.Format("{0:N0}", celsius);
}

Using string interpolation:

private void btnCalcFahrenheit_Click(object sender, EventArgs e)
{
    var fahrenheit = 9.0/5.0 * Convert.ToDouble(txtTemperature.Text) + 32.0;
    lblFahrenheit.Text = $"{fahrenheit:N2}";
}
private void btnCalcCelsius_Click(object sender, EventArgs e)
{
    var celsius = 5.0/9.0*(Convert.ToDouble(txtTemperature.Text) - 32.0);
    lblCelsius.Text = $"{celsius:N2}";
}

Note that the formatter "N2" will format the number using your selected locale's radix and separator character. For US-EN, that will be "." for radix and "," for separator. For instance, 1295.422 degrees would be formatted as 1,295.42.

STLDev
  • 5,950
  • 25
  • 36