比较c#中作为数据类型字符串的两个价格
本文关键字:两个 字符串 数据类型 比较 | 更新日期: 2023-09-27 18:15:18
我想知道我将如何比较2价格作为数据类型字符串。
例子;
string oldPrice = "£1.99";
string newPrice = "£2.50";
我想比较如果newPrice>= oldPrice,但我不确定如何将字符串转换为十进制/int。去掉£符号
任何想法?关于如何解决这个问题的提示或技巧?
应该可以:
string oldPrice = "£1.99";
decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);
将货币存储为double
是而不是一个好主意,使用decimal
会更好。十进制类型仅在表示以10为基数的数字时更准确(例如在货币/金融计算中使用的数字)。一般来说,对于任意实数,double类型将提供至少同样高的精度和更快的速度。还可以查看这个和这个链接,了解更多关于何时何地使用decimal
或double
的信息。
也可以在这里查看@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为基数的数字。因此,它们不能表示一些十进制值,因此它们以您意想不到的方式舍入。当你对货币价值进行数学运算时,你最不想要的就是因为四舍五入而赔钱!