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

时间:2013-01-09 15:12:37

标签: c# .net winforms textbox string-formatting

我使用一些文本框来显示总计,小计和折扣。我将小数转换为字符串以在文本框中表示它们。另外,我想在开头有"$"

我用这个来实现这个目标:

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

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

4 个答案:

答案 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或其他一些集合中,并使用这些值来计算您需要的值。

因此,您可以使用任何您喜欢的格式设置十进制值的格式,而无需担心如何从字符串转换回来。