我在C#中很新,我试图做一个Windows窗体应用程序而且我遇到了问题。所以基本上是我的程序所做的,它从.txt文件中读取一个数字,并将其与用户在textBox中给出的数字相乘。然后当用户按下按钮时,它会在另一个textBox中告诉答案。所以我的问题是,当它试图读取.txt文件并将其传递给double并乘以它时出现问题,程序崩溃了。我已将按钮的代码包含在'
下面private void button1_Click(object sender, EventArgs e)
{
double answer;
double num;
double Filename = double.Parse(File.ReadAllText(@"C:/temp/hinnat.txt"));
num = double.Parse(textBox1.Text);
answer = Filename * num;
textBox2.Text = answer.ToString();
}
答案 0 :(得分:0)
如果文字无效,请使用TryParse
private void button1_Click(object sender, EventArgs e)
{
double answer;
double num;
double Filename
if (double.TryParse(File.ReadAllText(@"C:/temp/hinnat.txt"), out Filename)
&& double.TryParse(textBox1.Text, out num))
{
answer = Filename * num;
textBox2.Text = answer.ToString();
}
}
答案 1 :(得分:0)
Double.Parse 和 Double.TryParse 方法取决于文化,即在某些文化中,小数点分隔符为点('。')比如 10.5 ,而在其他文化中,小数点分隔符是逗号(','),如 10,5 。这就是为什么如果您不确定文本文件中可能包含哪些输入,或者您的应用程序的当前文化是什么,最好使用自定义 TryParse 方法替换任何带点的逗号,并使用不变文化将字符串解析为双倍:
private static bool TryParse(string str, out double result)
{
// Invariant culture uses dot ('.') as decimal separator, so replace any comma with dot
if (str.IndexOf(',') != -1)
{
str = str.Replace(',', '.');
}
// Try parsing with the Invariant culture
return Double.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out result);
}
然后你可以这样称呼它:
string fileContent = File.ReadAllText(@"C:/temp/hinnat.txt");
double fileDouble;
if (TryParse(fileContent, out fileDouble))
{
// Parsing was successfull
// Your code here
}