我想知道如何比较2的价格作为数据类型字符串。
榜样;
string oldPrice = "£1.99";
string newPrice = "£2.50";我想比较一下newPrice是>=还是oldPrice,但我不确定如何将字符串转换为十进制/int。摘下国标。
有什么想法吗?关于如何解决这个问题的提示或建议?
发布于 2016-10-28 08:00:09
这应该是可行的:
string oldPrice = "£1.99";
decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);将货币存储为double是而不是的好主意,最好使用decimal。十进制类型仅在表示基数10的数字(例如货币/金融计算中使用的数字)时更准确。一般来说,双类型将提供至少同样高的精度和绝对更高的速度任意实数。还可以查看this和this链接,以获得更多何时何地使用decimal或double的信息。
也可以查看@Triynko在here上的评论:
这里是为什么您使用十进制货币:双的准确性只有16小数位数,而在几个算术操作后,错误将迅速累积到足够大的15,14,13等数字。四舍五入到“美分”至少需要一位完全精确的数字,然后是美分,但实际上,您应该保留4或5以避免累积的算术错误,您不能允许这些错误破坏用来舍入美分的百分之一列。这就留给您16 (总计)-2(美分)- (4或5错误填充)=哦$hit,只有7(或更少)可靠的整数位数为您的钱!
发布于 2016-10-28 07:56:48
if(decimal.Parse(newPrice, System.Globalization.NumberStyles.Currency) >= decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency)){
// Do something here
}虽然您也可以使用double.Parse(...),但将货币存储在浮动汇率中并不是一个好主意,因为它们实际上是以基数2的形式存储的,而当我们谈论货币时,我们关心的是基数10的数字。因此,它们不能表示一些十进制值,因此它们以您不期望的方式舍入。当你对货币价值进行数学运算时,你最不想要的就是因为四舍五入而损失金钱!
有关更详细的解释,请参见here。
https://stackoverflow.com/questions/40300527
复制相似问题