我使用一些文本框来显示总计,小计和折扣。我将小数转换为字符串以在文本框中表示它们。另外,我想在开头有"$"
。
我用这个来实现这个目标:
tbx_total.Text = total.ToString("$ ##0.##");
从图形上看,这很有效,但我的大问题是我需要该文本框值来计算其他值。基本上,当我尝试将该文本框文本转换为十进制时,我在运行时遇到格式错误。显然,这是由于ToString("$ ##0.##")
格式。有没有办法在没有格式的情况下获得价值?
答案 0 :(得分:2)
一个简单的解决方案是:
tbx_total.Text = total.ToString("$ ##0.##");
tbx_total.Tag = total;
然后使用tbx_total.Tag
属性进一步使用。
答案 1 :(得分:1)
在阅读它时,您可以使用NumberStyles进行解析以获得所需的效果。 NumberStyles上有许多按位操作,因此我建议研究如何使用它们以获得更大的灵活性:
double.Parse(total, NumberStyles.Currency);
此外,我更喜欢这种格式化货币,但纯粹是风格。
String.Format("{0:C}", total);
注意:来回解析会产生一些开销,因此根据数据量,将值卸载到对象可能更明智,并在需要小数值时再引用它。
答案 2 :(得分:1)
作为替代方案,无论何时读取值,都可以执行此操作:
double value = 0;
if (!double.TryParse(tbx_total.Text.TrimStart(new char[] { '$', ' ' }), out value))
{
//Ooops... not a valid number
}
所以在这里你基本上删除了在数字之前添加的'$'和空格,使你能够将它解析为double。这样您就可以检查数字是否输入正确(前提是用户可以编辑文本框。
答案 3 :(得分:0)
我认为您应该将原始值(十进制)存储在DataTable
或其他一些集合中,并使用这些值来计算您需要的值。
因此,您可以使用任何您喜欢的格式设置十进制值的格式,而无需担心如何从字符串转换回来。