回答

收藏

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

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

numeric,float和decimal数据类型有什么区别,应该在什么情况下使用?
2 Q0 h, G& ?! n对于任何类型的金融交易(如工资领域),首选哪种交易,为什么?& X7 C% z; ~) x* u# f; G$ ^
                                                               
4 `( B; F, p" u" f  M' O" p# b    解决方案:                                                               
+ @6 A2 c& S- A- h                                                                浮点或实数据类型仅在十进制(最多38位)提供的精度不足时使用5 T# I5 `3 A/ b2 O* a6 f
许多数字指定的确切值不能存储类似的数字数据类型;它们的存储值非常接近。(Technet)
* W  d7 e5 C' q7 m4 ~避免在WHERE浮点或实数列用于子句搜索条件,尤其是=和运算符(Technet)
2 H6 l+ h9 k2 z) v  a' g( c% x所以一般来说,如果你的数字可以容纳,十进制提供的精度是[10E38位数和较小的38位数Float存储空间(可能还有速度)并不重要,处理异常行为和近似值类型的问题也不重要,一般使用Decimal。
/ G% I4 k& ^* o更有用的信息: u5 a( R6 |( A; z3 \, ~
数字=十进制(5-17字节)(精确数字数据类型)
- b- A3 @4 l& a! Z; t/ |将在.NET中映射为Decimal/ ]& `" ^# k. ]) @
在SQL Server中都有(18,0)作为默认(precision,scale)参数
( r) @2 A% m  P- F: X. rscale =最大小数位数可以存储在小数点右侧。
- L5 s+ G" \- K1 i9 N+ V请注意,money(8字节)和smallmoney(4字节)也是精确的,它们映射到.NET中的Decimal并且有四个小数点(MSDN)
8 S6 Y; q8 g2 G十进制和数字(Transact-SQL)-MSDN
& e$ O+ F1 m7 Y实数(4字节)(近似 数据类型)5 S1 R2 F+ f1 R
将在.NET中映射为Single
: k6 O* p) I( b* H1 u, f% z( o0 VISO的real同义词是float(24)
$ l& q% F7 i( E4 P' t0 b浮点数和实数(Transact-SQL)-MSDN
" J# G& e  ]8 {$ a0 A/ F浮点数(8字节)(近似 数据类型)
7 c% N7 @* r' F5 U6 q' U将在.NET中映射为Double
$ \. p0 H9 z% u4 A  |无论使用哪种类型的处理器体系结构或数字的大小,所有精确的数字类型都始终产生相同的结果。
+ M- ^' y6 ]. @1 m提供给float用于存储浮点数尾数的数据类型参数定义了位数。
$ O$ u4 E- r: }' o& H: q0 N8 i5 P近似数据类型通常使用较少的存储空间和较好的速度(最高20倍),你也应该考虑.NET中* 改变他们的时间
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则