比较c#中作为数据类型字符串的两个价格

本文关键字:两个 字符串 数据类型 比较 | 更新日期: 2023-09-27 18:15:18

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

例子;

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

我想比较如果newPrice>= oldPrice,但我不确定如何将字符串转换为十进制/int。去掉£符号

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

比较c#中作为数据类型字符串的两个价格

应该可以:

string oldPrice = "£1.99";
decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);

将货币存储为double而不是一个好主意,使用decimal会更好。十进制类型仅在表示以10为基数的数字时更准确(例如在货币/金融计算中使用的数字)。一般来说,对于任意实数,double类型将提供至少同样高的精度和更快的速度。还可以查看这个和这个链接,了解更多关于何时何地使用decimaldouble的信息。

也可以在这里查看@Triynko的评论:

以下是为什么使用Decimal表示金钱:Double的精度只有16十进制数字,经过几次算术运算后,就会出现错误迅速积累到足够大,可以爬到15、14、13等。位数。四舍五入到"分"至少需要一个整数精度在分位数之后,但实际上你应该保留4或5来避免累积算术错误,这是不允许的损坏你用来四舍五入的百分位栏。这使得你有16(总数)- 2(美分)-(4或5个错误填充)= oh $hit只有7(或更少)可靠的整数数字为您的钱!

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

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