2016-10-28 40 views
3

我想知道如何比较2价格作为数据类型字符串。比较2价格作为数据类型字符串在C#

示例;

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

我想比较,如果newPrice为> = oldPrice但即时通讯不能确定如何将字符串转换成十进制/ INT。取消英镑标志。

任何想法?提示或提示如何解决这个问题?

回答

7

这应该工作:

string oldPrice = "£1.99"; 

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

存储货币作为double一个好主意,这将是更好地使用decimal代替。十进制类型仅用于表示基数为10的数字(例如在货币/财务计算中使用的数字)才更精确。一般来说,双重类型对于任意实数都会提供至少精确度和速度。 同时检查出thisthis链接获取更多信息何时何地使用decimaldouble

同样来自here退房@ Triynko的评论:

这就是为什么你使用十进制货币:双的精度只有16 十进制数字,只是一些算术OPS后,错误将 迅速积累大量足以蔓延到15,14,13等 数字。四舍五入到“美分”需要至少一位数位的精确数字,但实际上你应该保留4或5到 绝对累积算术错误,你不能允许使用 腐败百分之一百圆柱你用来圆美分。这留下了 你16(总) - 2(美分) - (4或5错误填充)=哦$美元 只有7(或更少)可靠的整数数字为您的钱!

+3

为什么储存货币不是一个好主意?也许你应该在你的回答中解释:) – Pikoh

+0

@Pikoh我认为[this](http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when )会回答你的问题。 – SeM

+0

我知道答案SeM。我建议你在你的答案中解释完成它 – Pikoh

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

虽然你也可以使用double.Parse(...)它不是存储货币的浮动一个好主意,因为他们实际上是为基2号存储,而我们所关心的,当我们谈论基地10号钱。因此它们不能表示一些十进制值,所以它们以你不期望的方式进行循环。在对货币值进行数学运算时,您最不希望的是由于四舍五入而损失资金!

有关更详细的解释,请参见here