.Net:使用String.Replace将货币格式化值转换为十进制值

问题描述 投票:0回答:2

我有一个以货币格式格式化的值并显示在文本框中。我需要选择它并将其转换为十进制。例如我有$1,633.75作为字符串,并希望将其转换为十进制,以将其保存在数据库中。 已有问题和一些答案,但他们都建议使用更复杂的UDF等来解决问题。

问题是,为什么我们不能在字符串上使用replace方法来删除逗号(“,”)和“$”并简单地使用decimal.Parse?

说tbAmountPaid是$1,633.75

这样做的缺点是什么:

decimal.Parse(tbAmountPaid.Text.Replace(",","").Replace("$",""))

得到十进制类型1633.75值?

c# parsing casting decimal currency
2个回答
0
投票

缺点是硬编码。您永远不会知道文化和编写字符串的格式。字符串本身可能存在多个错误。如果您进行硬编码,最终可能会在代码中出现错误

我建议你使用格式提供程序。我从这里获取代码https://docs.microsoft.com/en-us/dotnet/api/system.decimal.parse?redirectedfrom=MSDN&view=netframework-4.7.2#System_Decimal_Parse_System_String_System_Globalization_NumberStyles_System_IFormatProvider_

string value;
decimal number;
NumberStyles style;
CultureInfo provider;

value = "$1,633.75";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
provider = new CultureInfo("en-US");
number = Decimal.Parse(value, style, provider);
Console.WriteLine("'{0}' converted to {1}.", value, number);

0
投票

好的,所以你不会问怎么做,你问“为什么不这样做?”......

  1. 您的替代品比正确的解决方案需要更多的努力,
  2. 为计算机处理更多的努力,
  3. 更多的内存使用(因为字符串是不可变的),
  4. 编译为更大的IL,
  5. 您的方法是特定于文化的。有些文化使用点作为千位分隔符,使用逗号作为小数位,更不用说不同的货币符号。

转过来问题,你觉得你的方法更好吗?

© www.soinside.com 2019 - 2024. All rights reserved.