我已经创建了一个基本的计算器,但现在我想添加一个文本框,让人可以选择将在答案框中显示的小数位数。
因此,例如,如果我在1/3中写入它将等于0,33333333 ...如果我只想要3位小数,例如,我在文本框中写入3并单击按钮,答案将会而是显示0,333。
private void button1_Click_1(object sender, EventArgs e)
{
int antal= int.Parse(tbxDeci.Text); // tbxDeci is the textbox where they write how many decimals that will be used
double svar = double.Parse(lblSvar.Text); // lblSvar is the label where the answer would display, in our case the 0,333...
double deci = Math.Round(svar, antal);
lblSvar.Text = deci.ToString();
}
然而,当我使用该程序并输入一个数字时,我不断收到错误" system.formatexception'输入字符串的格式不正确。'"
请帮助我,我真的很想编码
编辑:double svar = double.Parse(lblSvar.Text);
是我得到错误的地方
答案 0 :(得分:7)
这里有很多错误,但它都是可以解决的。
private void button1_Click_1(object sender, EventArgs e)
将按钮重命名为有意义的内容。 “Button1”什么也没告诉你。
int antal= int.Parse(tbxDeci.Text);
// tbxDeci is the textbox where they write how many decimals that will be used
首先,如果您曾必须撰写评论,说明名称的含义,那么您选择了错误的名称。这两件事都应该有更好的名称,这样你就不需要解释它们了。
其次,如果该文本框中没有整数,则此代码将崩溃。
第三,考虑如果有人输入像“-1”这样的有效整数会发生什么。可能没什么好处的。 假设您的用户会做蠢事。你必须编写用于处理用户愚蠢行为的代码。
解决所有这些问题:
int decimalPlaces;
bool success = int.TryParse(DecimalPlacesTextbox.Text, out decimalPlaces);
if (!success || decimalPlaces < 0) {
// Do something here!
// what do you think the right thing to do is?
}
else
{
// decimalPlaces is a non-negative integer.
继续。
double svar = double.Parse(lblSvar.Text);
这里有多个问题。
首先,再次命名,以便在没有评论的情况下理解它们。
其次,您必须使用TryParse
。
第三,如果您希望算术对某些十进制位置完全准确,那么请使用decimal
,而不是double
。 Double只能表示底部幂为2的分数; decimal可以表示底部具有10的幂的分数。
你可以从这里休息吗?
答案 1 :(得分:1)
修改强>
private void button1_Click_1(object sender, EventArgs e)
{
int antal= Integer.Parse(tbxDeci.Text); // tbxDeci is the textbox where they write how many decimals that will be used
double svar = Double.Parse(lblSvar.Text); // lblSvar is the label where the answer would display, in our case the 0,333...
double deci = Math.Round(svar, antal);
lblSvar.Text = deci.ToString();
}
答案 2 :(得分:0)
我相信您在以下行中收到错误:
double svar = double.Parse(lblSvar.Text);
这是可以预料的。 double.Parse()
将字符串转换为double(如果传递有效值)。在上面一行中,您要转换Text
标签的lblSvar
属性的值,直到您set
该属性为止,默认情况下它为空。基本上你要做的是以下几点:
double svar = double.Parse("");
由于空字符串无法转换为double,因此会出现错误。
为了实现最终目标,您不需要首先get
标签的值。您要做的是获取要转换的值,并获取要将其四舍五入的小数位,然后执行Math.Round()
并将结果输出到标签中。类似的东西:
private void button1_Click_1(object sender, EventArgs e)
{
int antal= int.Parse(tbxDeci.Text);
double svar = double.Parse(txtSvar.Text);
// Above, txtSvar is a TextBox to which the value you want to round off is entered.
double deci = Math.Round(svar, antal);
lblSvar.Text = deci.ToString();
}
修改强>
如果要获取标签中已显示的值,将其四舍五入,然后在标签中重新显示,只要您最初显示正确的 double 标签文字中的值。所以你的问题是,你设置标签的初始值是设置一些不正确的值。
但我相信,因为这是一个计算器,更好的方法是将小数实际保持在最大可能长度,显示只能达到你想要的任何小数位数。