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

时间:2018-09-18 03:55:23

标签: c# parsing casting decimal currency

我有一个以货币格式设置并在文本框中显示的值。我需要选择它并将其转换为十进制。例如我有<span>{pieces.map(item => { if(item === matchStr){ return <span className="match">{item}</span> }else{ return item } })}</span> 作为字符串,并想将其转换为十进制形式以将其保存在数据库中。
上面已经有问题和一些答案,但是它们都建议使用更复杂的UDF等来解决问题。

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

说tbAmountPaid为$1,633.75

这样做的缺点是什么

$1,633.75

获取十进制类型decimal.Parse(tbAmountPaid.Text.Replace(",","").Replace("$",""))的值?

2 个答案:

答案 0 :(得分: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_

-std=c++11

答案 1 :(得分:0)

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

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

将问题转过来,您觉得您的方法更好是什么?