首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中比较作为数据类型字符串的2种价格

在c#中比较作为数据类型字符串的2种价格
EN

Stack Overflow用户
提问于 2016-10-28 07:55:21
回答 2查看 538关注 0票数 3

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

榜样;

代码语言:javascript
复制
string oldPrice = "£1.99";
string newPrice = "£2.50";

我想比较一下newPrice是>=还是oldPrice,但我不确定如何将字符串转换为十进制/int。摘下国标。

有什么想法吗?关于如何解决这个问题的提示或建议?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-28 08:00:09

这应该是可行的:

代码语言:javascript
复制
string oldPrice = "£1.99";

decimal result = decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency);

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

也可以查看@Triynko在here上的评论:

这里是为什么您使用十进制货币:双的准确性只有16小数位数,而在几个算术操作后,错误将迅速累积到足够大的15,14,13等数字。四舍五入到“美分”至少需要一位完全精确的数字,然后是美分,但实际上,您应该保留4或5以避免累积的算术错误,您不能允许这些错误破坏用来舍入美分的百分之一列。这就留给您16 (总计)-2(美分)- (4或5错误填充)=哦$hit,只有7(或更少)可靠的整数位数为您的钱!

票数 7
EN

Stack Overflow用户

发布于 2016-10-28 07:56:48

代码语言:javascript
复制
if(decimal.Parse(newPrice, System.Globalization.NumberStyles.Currency) >= decimal.Parse(oldPrice, System.Globalization.NumberStyles.Currency)){
  //    Do something here
}

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

有关更详细的解释,请参见here

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40300527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档