我正在编写一个财务应用程序,其中使用了“价格”的概念。它目前由C#decimal
类型表示。我想让它更明确,并且能够在将来将其更改为double
,所以我想创建一个基本上与十进制类型完全相同的'Price'结构(可能是添加)一些验证,如必须大于0)。
您认为这样做的利弊是什么?
答案 0 :(得分:5)
请不要使用双倍钱。您必须记住将其四舍五入以显示您在其中使用的所有,并且如果您将大数除以或乘以,则存在潜在的准确性问题。十进制将给出溢出错误,双重将失去准确性。我不确定你,但是有钱,我更喜欢错误和中止操作,无声地继续进行准确性的降低。
如果有的话,基于我一直在进行的项目,你可能会考虑使用一个带小数的结构,并指出它是什么货币。
答案 1 :(得分:4)
结构应该用于(我认为)不可变的小类型,即值类型。我不确定“大量使用”是什么意思,但如果这些结构在性能关键操作中会被大量传递,则必须考虑复制它们的价格与堆分配的价格。我怀疑你是否需要考虑到这一点,但这是需要考虑的事情。我很少发现在日常活动中需要使用结构。
另外,正如Jonathan指出的那样,使用双重类型是一个坏主意。十进制类型更适合财务计算。
还有一个;你可能会听到很多关于堆栈v堆分配的回复,所以这篇文章可能会让你感兴趣:
http://blogs.msdn.com/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx
答案 2 :(得分:0)
没有理由更改此类数量的数据类型;但是,您可以决定添加其他信息,例如货币或小数位数,以便在计算中跟踪,因此在此时使用结构将为您节省大量时间。
答案 3 :(得分:-1)
除了C#之外的.NET语言可能无法访问结构。舍入错误也可能是一个问题。为什么不创建Money类并将值存储为Decimal和使用的货币。