C#decimal和double

时间:2016-08-04 17:09:00

标签: c#

根据我的理解,十进制用于精度,建议用于货币计算。 Double提供更好的范围,但精度更低,并且比十进制快得多。

如果我有时间和速率怎么办,我觉得双倍适合时间和十进制速率。我不能混合这两个并运行计算而不进行铸造,这是另一个性能瓶颈。这里最好的方法是什么?只需使用十进制时间和速率?

2 个答案:

答案 0 :(得分:1)

两者都使用doubledecimal用于货币或其他情况,其中数字的基数10表示很重要。如果您不关心数字的基数10表示,请不要使用decimal。对于物理量的时间或变化率这样的事情,基数10表示通常无关紧要,因此decimal不是最合适的选择。

要认识到的重要一点是decimal仍然是浮点类型。它仍然受到舍入误差的影响,并且不能代表某些“简单”数字(例如1/3)。它的一个优点(和一个目的)是它可以表示精确少于29位有效数字的十进制数字。这意味着数字像0.1或12345.6789。基本上你可以用少于29位的纸写下任何小数。如果您有重复的小数或无理数,decimal没有任何重大好处。

答案 1 :(得分:0)

经验法则是使用更适合您将处理的值的类型。这意味着您应该使用DateTimeTimeSpan时间,除非您只关心特定单位,例如秒,天等,在这种情况下您可以使用任何整数类型。通常情况下,您需要精确度并且不希望因舍入而出现任何错误,因此我不会使用任何浮点类型,例如floatdouble

对于与金钱相关的任何事情,当然你也不想要任何舍入错误,所以你应该在这里使用decimal

最后,只有在某些非常具体的要求中,您需要绝对速度才能完成数百万次,并且decimal不会发生足够快,只有我会考虑使用另一种更快的类型。我会首先尝试使用整数值(如果你有小数,可以将你的值乘以10的幂)并且最后只除以10的幂。如果无法做到这一点,只有我会想到使用double。如果您不确定是否需要,请不要进行过早优化