0

I´m using some textboxes to show totals, subtotals and discounts. I´m converting decimals to string to represent them in the textbox. Also, I would like to have the "$" at the beginning.

I have achieved this by using this:

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

Graphically, this is working great, but my big problem is that I need that textbox value to calculate other ones. Basically, I get a formatting error during runtime when I try to convert that textbox text to decimal. Obviously, this is due to the ToString("$ ##0.##") format. Is there any way to get the value without the format?

4

4 回答 4

2

一个简单的解决方案是:

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

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

于 2013-01-09T15:22:27.290 回答
1

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

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

所以在这里你基本上删除了数字之前添加的'$'和空格,使你能够将它解析为双精度数。通过这种方式,您可以检查数字是否输入正确(前提是用户可以编辑文本框。

于 2013-01-09T15:37:29.667 回答
1

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

double.Parse(total, NumberStyles.Currency);

此外,我更喜欢这种方式来格式化货币,但纯粹是风格上的。

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

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

于 2013-01-09T15:21:54.313 回答
0

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

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

于 2013-01-09T15:47:35.503 回答