回答

收藏

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

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

numeric,float和decimal数据类型有什么区别,应该在什么情况下使用?
9 O2 h5 Q) ~$ \+ M6 J6 n对于任何类型的金融交易(如工资领域),首选哪种交易,为什么?' }' V: ~  ^6 |2 @2 {0 G
                                                                " G' I: L1 O% n; J5 R& h) r1 A
    解决方案:                                                               
1 K8 W1 x; o+ k1 a9 o0 b$ w5 Q2 v                                                                浮点或实数据类型仅在十进制(最多38位)提供的精度不足时使用
0 Z' E% I2 G! M4 k% K( N. _/ Z. c  [& X许多数字指定的确切值不能存储类似的数字数据类型;它们的存储值非常接近。(Technet)
  E. u& A1 E' _避免在WHERE浮点或实数列用于子句搜索条件,尤其是=和运算符(Technet)- e+ x, {* {0 m1 {1 u" P% s
所以一般来说,如果你的数字可以容纳,十进制提供的精度是[10E38位数和较小的38位数Float存储空间(可能还有速度)并不重要,处理异常行为和近似值类型的问题也不重要,一般使用Decimal。
6 ?3 F) e+ f- l更有用的信息: E' {2 ?$ G( G0 a1 {
数字=十进制(5-17字节)(精确数字数据类型)
: D. }& K2 w% V- n- G/ @  I将在.NET中映射为Decimal3 {. b- U. K6 u
在SQL Server中都有(18,0)作为默认(precision,scale)参数
# i/ `9 A# j, V7 bscale =最大小数位数可以存储在小数点右侧。
% p, J6 x% \2 ~4 Q请注意,money(8字节)和smallmoney(4字节)也是精确的,它们映射到.NET中的Decimal并且有四个小数点(MSDN)5 ^8 g4 n3 u: M( ]$ E1 I0 d
十进制和数字(Transact-SQL)-MSDN+ `; ]% I, D+ S" y9 b) d9 }% r
实数(4字节)(近似 数据类型)+ c, g0 t0 \! t' T2 g, }5 @
将在.NET中映射为Single7 P9 ?3 ^/ o. K8 `) Q
ISO的real同义词是float(24): Y; y% ^' ?4 Q& S8 q/ R
浮点数和实数(Transact-SQL)-MSDN$ J6 g3 T6 J; d
浮点数(8字节)(近似 数据类型)
5 Z9 ?9 T- w6 r9 Y- s2 \5 x, L将在.NET中映射为Double+ J/ {% t. ?/ ?! q' u- s
无论使用哪种类型的处理器体系结构或数字的大小,所有精确的数字类型都始终产生相同的结果。; q! M3 {+ J/ m! H1 x, S) W+ P" d
提供给float用于存储浮点数尾数的数据类型参数定义了位数。+ x: R$ s. c( L% B# C2 d+ ~. {
近似数据类型通常使用较少的存储空间和较好的速度(最高20倍),你也应该考虑.NET中* 改变他们的时间
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则