按下按钮后,我希望2 textBoxes 显示数字,但是当我按下按钮时,一个textBox显示数字,第二个不显示。
private void Calculating(object sender, EventArgs e)
{
if (textBox6.Text != "")
{
rutr = Double.Parse(textBox6.Text);
rutd = rutr * 2;
textBox7.Text = (rutd).ToString();
textBox8.Text = (3 / 4 * pi * rutr * rutr * rutr).ToString();
}
}
textBox8
没有显示正确的数字。
答案 0 :(得分:1)
错误行为的根本原因是整数除法:3 / 4 == 0
应
// The formula seems to be a volume of a sphere: 3/4 * Pi * r**3
// It's a physical world, that's why 3.0 - double, not 3M - decimal
textBox8.Text = (3.0 / 4.0 * pi * rutr * rutr * rutr).ToString();
请注意浮点 3.0
值,而不是整数 3
。另一个建议是使用double.TryParse
:如果我们可以解析用户输入(textBox6.Text
)然后执行并计算
private void Calculating(object sender, EventArgs e) {
double rutr = 0.0;
// If we can parse textBox6.Text into double rutr
if (double.TryParse(textBox6.Text, out rutr)) {
rutd = rutr * 2;
textBox7.Text = (rutd).ToString();
textBox8.Text = (3.0 / 4.0 * pi * rutr * rutr * rutr).ToString();
}
}
修改:从技术上讲,可能在{{1}中生成空白(""
) },请参阅下面的评论(这本身就是一个有趣的问题)。这是代码
textBox8
我们在此利用 using System.Globalization;
...
CultureInfo ci = (CultureInfo.CurrentCulture.Clone() as CultureInfo);
// The idea: double.NaN will be displayed as blank
ci.NumberFormat.NaNSymbol = "";
CultureInfo.CurrentCulture = ci;
double pi = Math.Sqrt(-1); // pi is double.NaN - imaginary unit
...
// 0 * NaN * rutr * rutr * rutr == NaN which is printed as empty string
textBox8.Text = (3 / 4 * pi * rutr * rutr * rutr).ToString();
这一事实。但是,我不相信这种错误
答案 1 :(得分:0)
您应该使用后缀告诉编译器数字文字不被视为int。
textBox8.Text = (3M / 4M * pi * rutr * rutr * rutr).ToString();
https://docs.microsoft.com/en-US/dotnet/csharp/language-reference/keywords/decimal
以下是可能的后缀列表:
F:漂浮 D:加倍 你:uint L:很久 UL:ulong M:十进制