我想知道如何将2个价格作为数据类型字符串进行比较。
实施例;
string oldPrice = "£1.99";
string newPrice = "£2.50";
我想比较newPrice是> =到oldPrice,但我不确定如何将字符串转换为decimal / int。脱掉英镑符号。
有什么想法吗?关于如何解决这个问题的提示或技巧?
答案 0 :(得分:7)
这应该有效:
string oldPrice = "£1.99";
decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);
将货币存储为double
不是一个好主意,最好使用decimal
。十进制类型仅在表示基数为10的数字时更准确(例如,用于货币/财务计算的数字)。一般来说,double类型将为任意实数提供至少同样高的精度和明显更高的速度。
另请查看this和this链接,了解有关何时何地使用decimal
或double
的更多信息。
另请查看来自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。