回答

收藏

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

技术问答 技术问答 224 人阅读 | 0 人回复 | 2023-09-14

numeric,float和decimal数据类型有什么区别,应该在什么情况下使用?
  d$ w. F6 L0 I( z' j* Q6 x对于任何类型的金融交易(如工资领域),首选哪种交易,为什么?. }6 b1 N5 d" k
                                                                0 I' Q) g/ M; F# [6 d
    解决方案:                                                                ) B6 j0 `/ i# H8 D
                                                                浮点或实数据类型仅在十进制(最多38位)提供的精度不足时使用
$ Q9 X* |! d* f许多数字指定的确切值不能存储类似的数字数据类型;它们的存储值非常接近。(Technet)
: R; q6 C% q8 |, i/ g4 v# ]" U避免在WHERE浮点或实数列用于子句搜索条件,尤其是=和运算符(Technet)
5 F" ]3 e  s6 }9 z7 C" f$ S0 ~所以一般来说,如果你的数字可以容纳,十进制提供的精度是[10E38位数和较小的38位数Float存储空间(可能还有速度)并不重要,处理异常行为和近似值类型的问题也不重要,一般使用Decimal。
% W4 Y" ]3 D. V* a; l: H更有用的信息
/ M% R$ X7 M8 {* v5 S( {数字=十进制(5-17字节)(精确数字数据类型)+ R/ N- c' e; I8 x# N: s; F8 k
将在.NET中映射为Decimal$ k3 [/ Z# s# V5 g! w- h; ^7 E1 v
在SQL Server中都有(18,0)作为默认(precision,scale)参数
" h4 i9 j" z9 n' Escale =最大小数位数可以存储在小数点右侧。' c0 Y) r4 _4 X. \
请注意,money(8字节)和smallmoney(4字节)也是精确的,它们映射到.NET中的Decimal并且有四个小数点(MSDN)
7 q& G& A1 E, W& D( D5 v- `十进制和数字(Transact-SQL)-MSDN, \7 G6 F/ r$ I3 e& ]; B
实数(4字节)(近似 数据类型)
* O2 _/ Z! x0 p, H将在.NET中映射为Single
& J2 J8 i5 e+ G8 M4 h7 A* ZISO的real同义词是float(24)9 c4 O$ r: Y7 i0 D8 F1 R! j2 n
浮点数和实数(Transact-SQL)-MSDN* k- v; ^' r7 p! F
浮点数(8字节)(近似 数据类型)8 O& J2 \! |' l6 t) B; [1 c
将在.NET中映射为Double
( R$ g' Y# p* c无论使用哪种类型的处理器体系结构或数字的大小,所有精确的数字类型都始终产生相同的结果。: H& ?+ B3 k, }* W
提供给float用于存储浮点数尾数的数据类型参数定义了位数。
2 m7 P* K  h( H近似数据类型通常使用较少的存储空间和较好的速度(最高20倍),你也应该考虑.NET中* 改变他们的时间
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则