如果我只需要1位或2位精度,浮点数是否比十进制类型好?

时间:2016-03-09 16:49:00

标签: sql sql-server

如果我只需要小数位后精度后的1位或2位数,我应该使用float还是仍然使用decimal(18,2)

有问题的数值代表薪水。

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中工作正常。)