格式化文本框c#并使用未格式化的值
本文关键字:格式化 文本 | 更新日期: 2023-09-27 17:51:15
我正在使用一些文本框来显示总计、小计和折扣。我正在将小数转换为字符串,以便在文本框中表示它们。此外,我希望一开始就有"$"
。
我已经通过使用这个实现了这一点:
tbx_total.Text = total.ToString("$ ##0.##");
从图形上看,这很有效,但我的大问题是,我需要这个文本框值来计算其他值。基本上,当我试图将文本框文本转换为十进制时,在运行时会出现格式错误。显然,这是由于ToString("$ ##0.##")
格式。有没有任何方法可以在没有格式的情况下获得值?
一个简单的解决方案是:
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
或其他集合中,并使用这些值来计算您需要的值。
因此,您可以将十进制值格式化为任何您喜欢的格式,而不必担心如何从字符串转换回来。