在c#中将2个价格作为数据类型字符串进行比较

D B*_*D B 3 c# type-conversion

我想知道如何将2个价格作为数据类型字符串进行比较.

例;

string oldPrice = "£1.99";
string newPrice = "£2.50";
Run Code Online (Sandbox Code Playgroud)

我想比较newPrice是> = oldPrice但我不确定如何将字符串转换为decimal/int.脱掉£符号.

有任何想法吗?关于如何解决这个问题的提示或技巧?

SᴇM*_*SᴇM 7

这应该工作:

string oldPrice = "£1.99";

decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);
Run Code Online (Sandbox Code Playgroud)

将货币存储double不是一个好主意,decimal而是使用它更好.十进制类型仅在表示基数为10的数字时更准确(例如,用于货币/财务计算的数字).一般来说,double类型将为任意实数提供至少同样高的精度和明显更高的速度.还检查了这个这个链接,了解更多的信息在哪里以及何时使用decimaldouble.

此外,从检查出@ Triynko的评论在这里:

这就是为什么你使用Decimal的原因:Double的精确度只有16位十进制数字,经过几次算术运算后,错误会迅速累积到足以爬进15,14,13等数字.舍入到"美分"要求在美分数字后至少有一位完全准确的数字,但实际上你应该保留4或5来隔离累积的算术错误,你不能允许它破​​坏你用来围绕美分的百分之一列.剩下16(总) - 2(美分) - (4或5错误填充)=哦$ $只有7(或更少)可靠的整数位数为您的钱!

  • 为什么将货币存储为双倍并不是一个好主意?也许你应该在你的答案中解释:) (3认同)
  • @SeM - 你最好编辑你的答案,包括使用`decimal`的原因,然后添加到它的链接 (3认同)