如果我只需要小数位后精度后的1位或2位数,我应该使用float
还是仍然使用decimal(18,2)
?
有问题的数值代表薪水。
答案 0 :(得分:2)
您应该使用decimal
类型或更好的money
类型,这种类型特别适合这些需求。
您不应该使用float
,因为float是十进制值的近似表示。
请参阅MSDN文档,了解为什么我们不应该使用float
here
float和real数据类型称为近似数据类型。 float和real的行为遵循IEEE 754规范对近似数值数据类型的要求。 近似数值数据类型不存储为许多数字指定的确切值;它们存储了非常接近的值。对于许多应用,指定值和存储的近似值之间的微小差异不明显。但有时,差异变得明显。
由于float和实际数据类型的近似性质,在需要精确数字行为时不要使用这些数据类型,例如在财务应用程序中,在涉及舍入或平等的操作中检查。相反,请使用整数,小数,金钱或小数据类型。
答案 1 :(得分:1)
确定是否要使用二进制十进制或十进制小数的主要问题不是准确性。它"我怎么能期望计算继续进行"。
您从decimal
获得的主要内容是您可以在纸上计算的,具有定点数字。 E.g:
13.22
+ 7.3
-----
20.52
decimal
并不比float
更精确(尽管也可能是某些应用程序)。关键在于它会在纸上犯同样的错误 - 它是十进制十进制数,而不是二进制数。
或者在另一种思路中,您的输入肯定是十进制十进制数(通常是字符串或类似数字)。因此,如果你使用浮点数,你会得到十进制 - >二进制 - >计算 - >小数。二进制到十进制表示没有信息丢失(有限二进制数可以用有限的十进制数精确表示),但另一种方法是不正确 - 即使类似0.1
的 no 二进制十进制数中的有限表示(就像1 / 3
在十进制十进制数中没有有限表示,但在基数6中工作正常。)