我想知道如何比较2价格作为数据类型字符串。比较2价格作为数据类型字符串在C#
示例;
string oldPrice = "£1.99";
string newPrice = "£2.50";
我想比较,如果newPrice为> = oldPrice但即时通讯不能确定如何将字符串转换成十进制/ INT。取消英镑标志。
任何想法?提示或提示如何解决这个问题?
我想知道如何比较2价格作为数据类型字符串。比较2价格作为数据类型字符串在C#
示例;
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的数字(例如在货币/财务计算中使用的数字)才更精确。一般来说,双重类型对于任意实数都会提供至少精确度和速度。 同时检查出this和this链接获取更多信息何时何地使用decimal
或double
。
同样来自here退房@ Triynko的评论:
这就是为什么你使用十进制货币:双的精度只有16 十进制数字,只是一些算术OPS后,错误将 迅速积累大量足以蔓延到15,14,13等 数字。四舍五入到“美分”需要至少一位数位的精确数字,但实际上你应该保留4或5到 绝对累积算术错误,你不能允许使用 腐败百分之一百圆柱你用来圆美分。这留下了 你16(总) - 2(美分) - (4或5错误填充)=哦$美元 只有7(或更少)可靠的整数数字为您的钱!
if(decimal.Parse(newPrice, System.Globalization.NumberStyles.Currency) >= decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency)){
// Do something here
}
虽然你也可以使用double.Parse(...)
它不是存储货币的浮动一个好主意,因为他们实际上是为基2号存储,而我们所关心的,当我们谈论基地10号钱。因此它们不能表示一些十进制值,所以它们以你不期望的方式进行循环。在对货币值进行数学运算时,您最不希望的是由于四舍五入而损失资金!
有关更详细的解释,请参见here。
为什么储存货币不是一个好主意?也许你应该在你的回答中解释:) – Pikoh
@Pikoh我认为[this](http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when )会回答你的问题。 – SeM
我知道答案SeM。我建议你在你的答案中解释完成它 – Pikoh