小编典典

SQL Server中的数字,浮点数和小数之间的差异

sql

numeric,floatdecimal数据类型之间的区别是什么,应在哪种情况下使用?

对于任何类型的金融交易(例如,薪水领域),首选哪种交易,为什么?


阅读 359

收藏
2021-04-16

共1个答案

小编典典

仅当十进制(最多38位)提供的精度不足时才使用浮点或实数数据类型

近似数字数据类型不能存储为许多数字指定的确切值;他们存储的值非常接近。(Technet)

避免在WHERE子句搜索条件中使用浮点或实数列,尤其是=和<>运算符(Technet)

因此通常来说,因为如果您的数字可以容纳,则十进制提供的精度为[10E38〜38位数],并且较小的Float存储空间(可能还有速度)并不重要,并且处理异常行为和近似数值类型的问题也不重要可以接受,一般使用Decimal。

更有用的信息

  • 数字=十进制(5到17个字节)(精确的数字数据类型)
  • 将在.NET中映射为Decimal
  • 在SQL Server中都具有(18,0)作为默认(precision,scale)参数
  • scale =可以存储在小数点右边的最大小数位数。
  • 请注意,money(8字节)和smallmoney(4字节)也是精确的,它们映射到.NET中的Decimal并具有4个小数点(MSDN)
  • 十进制和数字(Transact-SQL)-MSDN
  • 实数(4字节)(近似 数值数据类型)
  • 将在.NET中映射为Single
  • ISO的real同义词是float(24)
  • 浮点数和实数(Transact-SQL)-MSDN
  • 浮点数(8字节)(近似 数值数据类型)
  • 将在.NET中映射为Double
  • 无论使用哪种类型的处理器体系结构或数字的大小,所有精确的数字类型都始终产生相同的结果。
  • 提供给float数据类型的参数定义了用于存储浮点数尾数的位数。
  • 近似数值数据类型通常使用较少的存储空间并具有较好的速度(最高20倍),并且您还应考虑在.NET中* 转换它们的时间
2021-04-16