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

时间:2016-10-28 07:55:22

标签: c# type-conversion

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

实施例;

string oldPrice = "£1.99";
string newPrice = "£2.50";

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

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

2 个答案:

答案 0 :(得分:7)

这应该有效:

string oldPrice = "£1.99";

decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);

将货币存储为double 是一个好主意,最好使用decimal。十进制类型仅在表示基数为10的数字时更准确(例如,用于货币/财务计算的数字)。一般来说,double类型将为任意实数提供至少同样高的精度和明显更高的速度。 另请查看thisthis链接,了解有关何时何地使用decimaldouble的更多信息。

另请查看来自here的@ Triynko的评论:

  

这就是你使用Decimal赚钱的原因:Double的准确度只有16   十进制数字,只有几个算术运算后,错误就会出现   迅速累积到足以爬进15,14,13等。   数字。四舍五入到“美分”需要至少一位满   美分后的准确度,但实际上你应该保留4或5   从累积算术错误中隔离,这是您不能允许的   腐败你用来围绕美分的百分之一列。离开了   你有16(总) - 2(分) - (4或5错误填充)=哦$ hit   你的钱只有7个(或更少)可靠的整数位数!

答案 1 :(得分:3)

if(decimal.Parse(newPrice, System.Globalization.NumberStyles.Currency) >= decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency)){
  //    Do something here
}

虽然您也可以使用double.Parse(...),但是将货币存储在浮点数中并不是一个好主意,因为它们实际上存储为基数为2的数字,而当我们谈论的时候我们关心基数为10的数字钱。因此,它们不能代表某些小数值,因此它们会以您不期望的方式进行舍入。在对货币值进行数学运算时,你想要的最后一件事就是因为四舍五入而亏本!

有关更详细的说明,请参阅here