如何添加多个文本框数字,并将总和存储为双精度变量

本文关键字:存储 变量 双精度 数字 何添加 添加 文本 | 更新日期: 2023-09-27 18:36:34

这是我的问题。我希望能够将 10 个文本框的值汇总到一个双精度类型变量中。

问题是文本框值由数据库填充,并不总是填充。我希望能够对所有 10 个值求和,而无需在 null 文本框中强制使用默认值零。

amount = Convert.ToDouble(amount1TextBox.Text + amount2TextBox.Text + amount3TextBox.Text + amount4TextBox.Text + amount5TextBox.Text + amount6TextBox.Text + amount7TextBox.Text + amount8TextBox.Text + amount9TextBox.Text + amount10TextBox.Text);

如何添加多个文本框数字,并将总和存储为双精度变量

TextBox的扩展方法怎么样:

namespace System
{
    public static class Extensions
    {
        public static double AsDouble(this TextBox t)
        {
            double val;
            double.TryParse(t.Text, out val);
            return val;
        }
    }
}

然后你可以像这样使用它:

var amt = amount1TextBox.AsDouble() +
    amount2TextBox.AsDouble() +
    amount3TextBox.AsDouble() +
    amount4TextBox.AsDouble() +
    amount5TextBox.AsDouble() +
    amount6TextBox.AsDouble() +
    amount7TextBox.AsDouble() +
    amount8TextBox.AsDouble() +
    amount9TextBox.AsDouble() +
    amount10TextBox.AsDouble();

这也意味着,在任何其他时间,您需要获取TextBox的值作为double它非常简单;在应用程序中的任何形式上!

抱歉,您需要检查每个文本框的值。 将其作为单独的函数会更干净一些:

public double GetValue(string text)
{
    if(string.IsNullOrEmpty(text)) 
        return 0;
    double value;
    if(double.TryParse(text, out value))
        return value;
    // not parsable
    return 0;
}

并致电

amount = 
    GetValue(amount1TextBox.Text) + 
    GetValue(amount2TextBox.Text) + 
    GetValue(amount3TextBox.Text) + 
    GetValue(amount4TextBox.Text) + 
    GetValue(amount5TextBox.Text) +         
    GetValue(amount6TextBox.Text) + 
    GetValue(amount7TextBox.Text) + 
    GetValue(amount8TextBox.Text) + 
    GetValue(amount9TextBox.Text) + 
    GetValue(amount10TextBox.Text);

您不能添加字符串并期望它们以数字方式求和。您只需连接文本。

您应该使用 Double.TryParse 来检查是否可以解析字符串:

double d1;
double.TryParse(amount1TextBox.Text, out d1));
double d2
double.TryParse(amount2TextBox.Text, out d2));
// and so on ...
double result = d1 + d2 + .... + d10;

你这里有几件事要做。 首先,您在字符串上使用+运算符,这会将它们连接为字符串,而不是将它们相加为数字。 因此,您需要先将它们转换为数字。

当然,所有这些文本框可能会有点臃肿。 但听起来你有一些业务逻辑,可能会让它更容易。 不需要强制文本框显示0,但如果没有有效值,则可以将其默认为 0

您可以首先创建一个简单的扩展方法,以便TextBox获取其数值或默认值 0 。 像这样:

public static double GetAmount(this TextBox t)
{
    double result = 0;
    double.TryParse(t.Text, out result);
    return result;
}

对于任何给定的TextBox您现在都可以通过以下方式轻松获取数值:

amount1TextBox.GetAmount();

这也意味着您可以对它们求和而不是连接它们,并且不需要将总和转换为double,因为金额已经double s。 因此,您可以执行以下简单操作:

amount = amount1TextBox.GetAmount() +
         amount2TextBox.GetAmount() +
         //...
         amount10TextBox.GetAmount();

一点 LINQ:

amount = Controls.OfType<TextBox>()
                 .Where(tb => tb.Name.StartsWith("amount"))
                 .Select(tb => tb.Text)
                 .Where(s => !String.IsNullOrEmpty(s))
                 .Sum(s => Int32.Parse(s));

假设您的文本框为空或有数字。如果可以在文本框中输入一些文本,那么最后一行应如下所示:

.Sum(s => { int i; return Int32.TryParse(s, out i) ? i : 0; })

Linq没什么乐趣。

var total = new[]{ amount1TextBox, amount2TextBox ,amount3TextBox, ...}
            .Sum(x=> x.AsDouble());

从新人那里得到的答案。

我知道

你已经选择一个适合你的答案,但因为你要求一个例子,而且因为其他人可能想要不同的解决方案,所以我在这里。

private  double GetSum(params TextBox[] arr)
    {
        double sum = 0;
        double temp;
        foreach (TextBox txt in arr)
        {
            double.TryParse(txt.Text,out temp);
            sum += temp;
        }
        return sum;
    }

并使用它:

double a = GetSum(new TextBox() { Text = "1" }, new TextBox() { Text = "1" }, new TextBox() { Text = "1" }, new TextBox() { Text = "a" });

从本质上讲,我喜欢 LINQ 它非常适合数据操作,但不是每个问题,需要一个复杂的解决方案,我宁愿坚持使用易于维护且易于他人理解的简单干净的解决方案。但同样,只有我:)