Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#应用程序中选择不同的转换_C# - Fatal编程技术网

在c#应用程序中选择不同的转换

在c#应用程序中选择不同的转换,c#,C#,我有一个转换长度的c#应用程序。如果用户输入一个以点(3.45)分隔的数字,应用程序会工作并给出正确的结果,但如果用户输入逗号(3,45),则会给出错误的结果。有人知道我如何解决这个问题吗 private void butCal_Click(object sender, EventArgs e) { // initialising and declaring variables double miles, kilometres, feet, m

我有一个转换长度的c#应用程序。如果用户输入一个以点(3.45)分隔的数字,应用程序会工作并给出正确的结果,但如果用户输入逗号(3,45),则会给出错误的结果。有人知道我如何解决这个问题吗

    private void butCal_Click(object sender, EventArgs e)
    {
        // initialising and declaring variables 

        double miles, kilometres, feet, metres, inches, centimetres = 0;

        // the if statements initiates an event handler to select items from the conversions (combobox) to do conversion

        if (Conversions.Text == "Miles to Kilometres")
        {
            if (!double.TryParse(txtNumber.Text, out miles)) // verifies that the string entered is a number
            {
                MessageBox.Show("Please enter a number !"); // displays message if no number is entered
            }

            // Logic for doing calculations
            kilometres = miles * 1.6093; 
            txtAnswer.Text = kilometres.ToString("N2") + " Kilometres"; // displays the answer and rounds it off to two decimals

            txtAnswer.Visible = true;
            txtAnswer.Enabled = false;
            lblAnswer.Text = " Answer = ";
            lblAnswer.Visible = true;
        }

        else if (Conversions.Text == "Kilometres to Miles")
        {
            if (!double.TryParse(txtNumber.Text, out kilometres))
            {
                MessageBox.Show("Please enter a number.");
            }
            miles = kilometres * 0.621;
            txtAnswer.Text = miles.ToString("N2") + " miles ";

            txtAnswer.Visible = true;
            txtAnswer.Enabled = false;
            lblAnswer.Text = " Answer = ";
            lblAnswer.Visible = true;
        }
        else if (Conversions.Text == "Feet to Metres")
        {
            if (!double.TryParse(txtNumber.Text, out feet))
            {
                MessageBox.Show("Please enter a number.");
            }
            metres = feet * 0.3048;
            txtAnswer.Text = metres.ToString("N2") + " metres ";

            txtAnswer.Visible = true;
            txtAnswer.Enabled = false;
            lblAnswer.Text = " Answer = ";
            lblAnswer.Visible = true;
        }

        else if (Conversions.Text == "Metres to Feet")
        {
            if (!double.TryParse(txtNumber.Text, out metres))
            {
                MessageBox.Show("Please enter a number.");
            }
            feet = metres * 3.280839895;
            txtAnswer.Text = feet.ToString("N2") + " Ft ";

            txtAnswer.Visible = true;
            txtAnswer.Enabled = false;
            lblAnswer.Text = " Answer = ";
            lblAnswer.Visible = true;
        }

        else if (Conversions.Text == "Inches to Centimetres")
        {
            if (!double.TryParse(txtNumber.Text, out inches))
            {
                MessageBox.Show("Please enter a number.");
            }
            centimetres = inches * 2.54;
            txtAnswer.Text = centimetres.ToString("N2") + " cm ";
        }

        else if (Conversions.Text == "Centimeters to Inches")
        {
            if (!double.TryParse(txtNumber.Text, out centimetres))
            {
                MessageBox.Show("Please enter a number.");
            }
            inches = centimetres * 0.3937;
            txtAnswer.Text = inches.ToString("N2") + " Inches ";

            txtAnswer.Visible = true;
            txtAnswer.Enabled = false;
            lblAnswer.Text = " Answer = ";
            lblAnswer.Visible = true;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // resetting all labels, text fields and the conversion (combobox)
        Conversions.SelectedIndex = -1;
        txtNumber.Clear();
        txtAnswer.Clear();
        butCal.Visible = false;

        // Hidding text fields and labels until they are called
        txtAnswer.Visible = false;
        txtNumber.Visible = false;
        lblAnswer.Visible = false;
        lblNumber.Visible = false;
    }

    private void butExit_Click(object sender, EventArgs e)
    {
        Close(); // exits the application
    }

double.TryParse有一个重载,用于获取区域性或数字样式


特别是对于
IFormatProvider提供程序
参数,如果您特别提到(3,45),可以对点使用CultureInfo.InvariantCulture,因为3,45可能没有任何意义。如果你想让它工作,请使用@selman22提供的解决方案,否则如果你确认用户输入的输入将是标准之一,即,将用于分离千,则使用此处给出的解决方案,类似于double或@Softlion提供的解决方案,考虑到你的要求。你可以试试下面的方法

   try
{
    double.Parse(txtNumber.Text, CultureInfo.InvariantCulture)
}
catch(Exception ae)
 {
            MessageBox.Show("Not a Number")
 }

你不能在开头用
替换
。请详细说明错误RESULT@NitinVarpe-不,因为
3100
并不意味着
3.100
,它的意思是
3100
(或者其他方式,取决于您的居住地)…如果输入类似的内容
1,23.3
:)?为什么还要麻烦呢?所有问题的答案都是42,所以
text=“42”
保证了正确的解析和可靠的结果。这是一个特例:D然后我们需要进行一些额外的验证,但OP没有问到。这里的问题是
3,45
仍然被认为是一个有效的数字。根据用户的区域设置,它将被(错误地)解释为
3.45
345
。那么什么时候抛出错误呢?
   try
{
    double.Parse(txtNumber.Text, CultureInfo.InvariantCulture)
}
catch(Exception ae)
 {
            MessageBox.Show("Not a Number")
 }