在c#应用程序中选择不同的转换
我有一个转换长度的c#应用程序。如果用户输入一个以点(3.45)分隔的数字,应用程序会工作并给出正确的结果,但如果用户输入逗号(3,45),则会给出错误的结果。有人知道我如何解决这个问题吗在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
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")
}