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

Posted

技术标签:

【中文标题】.Net:使用 String.Replace 将货币格式的值转换为十进制值【英文标题】:.Net: Converting currency formatted value to a decimal value using String.Replace 【发布时间】:2018-09-18 03:55:22 【问题描述】:

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

问题是,为什么我们不能对字符串使用替换方法来删除逗号(“,”)和“$”,而只使用decimal.Parse?

说 tbAmountPaid 是 $1,633.75

这样做有什么缺点:

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

获取十进制类型1633.75值?

【问题讨论】:

Problem parsing currency text to decimal type的可能重复 您可能需要重新阅读How to ask;第一步是研究。 How much research effort is expected of Stack Overflow users? 谢谢,我问了一个不同的问题,这个问题已经在我提到的许多帖子中讨论过。我无法发表评论,因此我必须发表一个问题来思考它。 请注意,您缺乏声誉并不妨碍您为另一个问题提供答案(只要它答案)。因此,您可以提供这种方法作为其中一个问题的替代答案,并查看人们提供的 cmets。 为什么不在文本框上使用蒙版? 【参考方案1】:

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

我建议您使用格式提供程序。我从这里拿了代码 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);

【讨论】:

【参考方案2】:

好吧,所以你不是在问怎么做,而是在问“为什么不这样做呢?”...

    与正确的解决方案相比,您的替代方案需要花费更多的精力来输入, 计算机处理的工作量更大, 更多的内存使用(因为字符串是不可变的), 编译为更大的 IL, 您的方法是针对特定文化的。有些文化使用点作为千位分隔符,使用逗号作为小数位,更不用说不同的货币符号了。

反过来,你觉得你的方法更好是什么?

【讨论】:

1.我不希望我的代码用于多种文化。 2. 编码时写起来更简单快捷,而不是创建一个UDF并传递一个值给它,然后删除格式,转换它并返回值。我可能是错的,但这就是我需要更多地了解为什么不这样的原因。非常感谢。 为了清楚起见,您是说decimal.Parse(tbAmountPaid.Text.Replace(",", "").Replace("$", ""))decimal.Parse(tbAmountPaid.Text, NumberStyles.Currency) 更容易(我不知道您为什么认为您需要UDF)。如果您的目标是“在编码时编写起来更简单、更快捷”,那么编写一个扩展方法来封装它。这样你就可以一次正确地编写它并在你的代码库中重复使用它。

以上是关于.Net:使用 String.Replace 将货币格式的值转换为十进制值的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中string.replace和string.replaceAll的区别及用法

JAVA中string.replace和string.replaceAll的区别及用法

如何使用string.replace替换

String replace() 和 replaceAll() 的区别

替代 String.Replace

string eregi_replace(string pattern, string replacement, string string);的使用