如何制作一个将小数舍入到我想要的数量的程序?

时间:2017-09-20 21:31:02

标签: c#

我已经创建了一个基本的计算器,但现在我想添加一个文本框,让人可以选择将在答案框中显示的小数位数。

因此,例如,如果我在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);
是我得到错误的地方

3 个答案:

答案 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 标签文字中的值。所以你的问题是,你设置标签的初始值是设置一些不正确的值。

但我相信,因为这是一个计算器,更好的方法是将小数实际保持在最大可能长度,显示只能达到你想要的任何小数位数。