【问题标题】:.Net: Converting currency formatted value to a decimal value using String.Replace.Net:使用 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值?

【问题讨论】:

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

标签: c# parsing casting decimal currency


【解决方案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】:

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

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

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

    【讨论】:

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