根据我的理解,十进制用于精度,建议用于货币计算。 Double提供更好的范围,但精度更低,并且比十进制快得多。
如果我有时间和速率怎么办,我觉得双倍适合时间和十进制速率。我不能混合这两个并运行计算而不进行铸造,这是另一个性能瓶颈。这里最好的方法是什么?只需使用十进制时间和速率?
答案 0 :(得分:1)
两者都使用double
。 decimal
用于货币或其他情况,其中数字的基数10表示很重要。如果您不关心数字的基数10表示,请不要使用decimal
。对于物理量的时间或变化率这样的事情,基数10表示通常无关紧要,因此decimal
不是最合适的选择。
要认识到的重要一点是decimal
仍然是浮点类型。它仍然受到舍入误差的影响,并且不能代表某些“简单”数字(例如1/3)。它的一个优点(和一个目的)是它可以表示精确少于29位有效数字的十进制数字。这意味着数字像0.1或12345.6789。基本上你可以用少于29位的纸写下任何小数。如果您有重复的小数或无理数,decimal
没有任何重大好处。
答案 1 :(得分:0)
经验法则是使用更适合您将处理的值的类型。这意味着您应该使用DateTime
或TimeSpan
时间,除非您只关心特定单位,例如秒,天等,在这种情况下您可以使用任何整数类型。通常情况下,您需要精确度并且不希望因舍入而出现任何错误,因此我不会使用任何浮点类型,例如float
或double
。
对于与金钱相关的任何事情,当然你也不想要任何舍入错误,所以你应该在这里使用decimal
。
最后,只有在某些非常具体的要求中,您需要绝对速度才能完成数百万次,并且decimal
不会发生足够快,只有我会考虑使用另一种更快的类型。我会首先尝试使用整数值(如果你有小数,可以将你的值乘以10的幂)并且最后只除以10的幂。如果无法做到这一点,只有我会想到使用double
。如果您不确定是否需要,请不要进行过早优化。