回答

收藏

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

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

numeric,float和decimal数据类型有什么区别,应该在什么情况下使用?% w5 D% B) N- F7 u# X
对于任何类型的金融交易(如工资领域),首选哪种交易,为什么?
- T2 K, ]; n9 @6 t8 n6 E                                                               
! P4 P: N: ^' s) i    解决方案:                                                                $ Q' w* U# N, P3 t
                                                                浮点或实数据类型仅在十进制(最多38位)提供的精度不足时使用
. H5 |( w3 \2 ]; x9 }+ {9 U许多数字指定的确切值不能存储类似的数字数据类型;它们的存储值非常接近。(Technet): f2 w* a- J* b; Q
避免在WHERE浮点或实数列用于子句搜索条件,尤其是=和运算符(Technet)3 X3 G4 u5 K/ Q
所以一般来说,如果你的数字可以容纳,十进制提供的精度是[10E38位数和较小的38位数Float存储空间(可能还有速度)并不重要,处理异常行为和近似值类型的问题也不重要,一般使用Decimal。
6 p# q5 ]$ v4 O更有用的信息
5 b  Z* Y! Y7 x数字=十进制(5-17字节)(精确数字数据类型)  D" _2 ?; B, s9 w' t
将在.NET中映射为Decimal' W1 `7 T  E2 h, s8 G3 c$ I2 A
在SQL Server中都有(18,0)作为默认(precision,scale)参数( Q6 I+ h# L* b5 M1 P
scale =最大小数位数可以存储在小数点右侧。
: I& b( O( \5 C3 a, A" C: C# t请注意,money(8字节)和smallmoney(4字节)也是精确的,它们映射到.NET中的Decimal并且有四个小数点(MSDN)  q' P' ?- S8 ?9 B( I! u: z" Y2 l9 u
十进制和数字(Transact-SQL)-MSDN
1 O! t. c3 R; W; b实数(4字节)(近似 数据类型)
$ ~/ S: y; r8 D& Z/ d7 w7 a  }将在.NET中映射为Single/ h6 o: R* N4 Y" V
ISO的real同义词是float(24)
9 V* f. K- w; s* v: b浮点数和实数(Transact-SQL)-MSDN
4 W$ J. X3 X% S8 D# U浮点数(8字节)(近似 数据类型)
. {2 X$ ]% K% ]0 S! {3 }4 R7 s将在.NET中映射为Double
3 o; m5 f+ Z. ^7 K6 ?无论使用哪种类型的处理器体系结构或数字的大小,所有精确的数字类型都始终产生相同的结果。
. t* i( T; ~) D# Q. d/ d, C, q; u提供给float用于存储浮点数尾数的数据类型参数定义了位数。
5 F( u+ _, r' g' h% V0 O0 a" U6 J近似数据类型通常使用较少的存储空间和较好的速度(最高20倍),你也应该考虑.NET中* 改变他们的时间
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则