SQL Server中的数字,浮点数和小数点之间的区别

我在Google中搜索并访问了十进制和数字以及SQL Server Helper,以搜集数字,浮点数和小数数据类型之间的差异,并找出在哪种情况下应该使用哪一种。

对于任何类型的金融交易(例如工资领域),哪一个是首选的,为什么?


只有在由十进制(最多38位)提供的精度不足时, 使用浮点型或实型数据类型

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

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

  • 所以一般情况下,如果你的数字适合它,那么由十进制提供的精度为[10E38〜38位],并且Float的较小存储空间(也许是速度)并不重要,处理异常行为和近似数值类型的问题不是可接受的, 通常使用Decimal

    更有用的信息

  • 数字=十进制(5到17个字节)( 精确的数字数据类型)
  • 将映射到.​​NET中的Decimal
  • 在SQL服务器中都具有(18,0)作为默认(精度,范围)参数
  • scale =可存储在小数点右侧的最大小数位数。
  • 请注意钱(8字节)和smallmoney(4字节)也是精确的,并且映射到.NET中的Decimal并具有4个小数点(MSDN)
  • 十进制和数字(Transact-SQL) - MSDN
  • 实数(4字节)( 近似数字数据类型)
  • 将映射到.​​NET中的Single
  • 实际的ISO同义词是float(24)
  • float和real(Transact-SQL) - MSDN
  • float(8字节)( 近似数字数据类型)
  • 将映射到.​​NET中的Double
  • 所有确切的数字类型总是会产生相同的结果,而不管使用何种类型的处理器架构或数量的大小
  • 提供给float数据类型的参数定义了用于存储浮点数尾数的位数
  • 近似的数字数据类型通常使用较少的存储空间并且速度更快(最高可达20x),并且您应该考虑在.NET中何时转换
  • C#中Decimal,Float和Double的区别是什么?
  • 小数与双倍速度
  • SQL Server - .NET数据类型映射(来自MSDN)
  • 准确的数字数据类型近似的数字数据类型

    主要来源 :MCTS Self-Paced Training Kit(考试70-433):Microsoft®SQLServer®2008数据库开发 - 第3章 - 表,数据类型和声明性数据完整性第1课 - 选择数据类型(指南) - 第93页


    MSDN准则:使用小数点,浮点数和实数据

    数字和小数数据类型的默认最大精度为38.在Transact-SQL中,数字在功能上等同于小数数据类型。 当数据值必须完全按指定存储时,使用小数数据类型来存储带小数的数字。

    float和real的行为遵循关于近似数值数据类型的IEEE 754规范。 由于float和真实数据类型的近似性质,当需要精确的数字行为时(例如财务应用程序中,涉及舍入操作或相等检查的操作),请不要使用这些数据类型。 相反,使用整数,小数,金钱或smallmoney数据类型。 避免在WHERE子句搜索条件中使用浮点或实数列,尤其是=和<>运算符。 最好将float和real列限制为>或<比较。


    不是一个完整的答案,而是一个有用的链接:

    “我经常对十进制值进行计算,在某些情况下,在进行任何计算之前将十进制值尽快浮动以快速浮动,会产生更好的精度。”

    http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

    链接地址: http://www.djcxy.com/p/21353.html

    上一篇: Difference between numeric, float and decimal in SQL Server

    下一篇: When should I use double instead of decimal?