格式化文本框c#并使用未格式化的值

本文关键字:格式化 文本 | 更新日期: 2023-09-27 17:51:15

我正在使用一些文本框来显示总计、小计和折扣。我正在将小数转换为字符串,以便在文本框中表示它们。此外,我希望一开始就有"$"

我已经通过使用这个实现了这一点:

tbx_total.Text = total.ToString("$ ##0.##");

从图形上看,这很有效,但我的大问题是,我需要这个文本框值来计算其他值。基本上,当我试图将文本框文本转换为十进制时,在运行时会出现格式错误。显然,这是由于ToString("$ ##0.##")格式。有没有任何方法可以在没有格式的情况下获得值?

格式化文本框c#并使用未格式化的值

一个简单的解决方案是:

tbx_total.Text = total.ToString("$ ##0.##");
tbx_total.Tag = total;

然后使用tbx_total.Tag属性进行进一步使用。

当在中读回它时,您可以使用NumberStyles进行解析以获得所需的效果。NumberStyles上有很多位操作,所以我建议研究如何使用它们来获得更大的灵活性:

double.Parse(total, NumberStyles.Currency);

此外,我倾向于这样格式化货币多一点,但纯粹是风格。

String.Format("{0:C}", total);

注意:来回分析确实会产生一些开销,因此根据数据量的不同,当您再次需要十进制值时,将值卸载到对象并引用它可能更明智。

作为一种替代方案,您可以在读取值时执行此操作:

double value = 0;
if (!double.TryParse(tbx_total.Text.TrimStart(new char[] { '$', ' ' }), out value))
{
      //Ooops... not a valid number
}

因此,在这里,您基本上删除了添加的"$"和数字前的空格,从而可以将其解析为双精度。通过这种方式,您可以检查数字是否输入正确(前提是用户可以编辑文本框。

我认为您应该将原始值(十进制(存储在DataTable或其他集合中,并使用这些值来计算您需要的值。

因此,您可以将十进制值格式化为任何您喜欢的格式,而不必担心如何从字符串转换回来。