如何添加多个文本框数字,并将总和存储为双精度变量
本文关键字:存储 变量 双精度 数字 何添加 添加 文本 | 更新日期: 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 它非常适合数据操作,但不是每个问题,需要一个复杂的解决方案,我宁愿坚持使用易于维护且易于他人理解的简单干净的解决方案。但同样,只有我:)