SQL SERVER的浮点数类型及与C#的对应关系

SQL SERVER:

float 与 real

7位数或15位数。这里说的位数,不是指小数位,而是包括整数和小数在内的位数。

float的位数是多少,要看float[(n)]里的n数值是多少。

n value 精度 存储大小

1-24

7 位数

4 字节

25-53

15 位数

8 字节

注意:
SQL Server 将 n 视为下列两个可能值之一。如果 1<=n<=24,则将 n 视为 24。如果 25<=n<=53,则将 n 视为 53
(是不是很怪异)

如果不写这个n,默认n是53,即15位。

real 的 ISO 同义词为 float(24),也就是7位了。


declare @f float(18) = 12345.0123456789
	,@f2 float(18) = 1234567.0123456789
	,@f3 float(18) = 123456789.0123456789
	,@f4 float(53) = 123456789.01234567890123456789;
declare @r real = 1234567.01234567890123456789;
select @f as [f],@f2 as [f2],@f3 as [f3],@f4 as [f4],@r as [real];

f                  f2                  f3                          f4                                 real
12345.01 1234567 1.234568E+08 123456789.012346 1234567


decimal和numeric

带固定精度和小数位数的数值数据类型。

decimal[ ( p[ , s] )] 和 numeric[ ( p[ , s] )]

固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 decdec(p, s)numeric 在功能上等价于 decimal

p(精度)

最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。

s (小数位数)

小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。

精度 存储字节数

1 - 9

5

10-19

9

20-28

13

29-38

17



可见,decimal和numeric可以指定小数位数。如果不指定,默认是不带小数。

declare @d decimal = 12.0123456789,@d2 decimal(5,3) = 12.0123456789;
select @d as [d],@d2 as [d2];

d d2
12 12.012


money和smallmoney

代表货币或货币值的数据类型。

数据类型 范围 存储

money

-922,337,203,685,477.5808 到 922,337,203,685,477.5807

8 字节

smallmoney

-214,748.3648 到 214,748.3647

4 字节

注释

moneysmallmoney 数据类型精确到它们所代表的货币单位的万分之一。


也就是说,money和smallmoney的小数位固定是4位。


declare @m money = 123456789.0123456789;
select @m as [money];

money
123456789.0123


C#

float


float 关键字表示存储 32 位浮点值的简单类型。 下表显示了 float 类型的精度和大致范围。

类型

大致范围

精度

.NET Framework 类型

float

-3.4 × 1038 到 +3.4 × 1038

7 位

System.Single


double

double 关键字表示存储 64 位浮点值的简单类型。 下表显示了 double 类型的精度和大致范围。

类型

大致范围

精度

.NET Framework 类型

double

±5.0 × 10−324 到 ±1.7 × 10308

15 到 16 位

System.Double


decimal

decimal 关键字表示 128 位数据类型。 同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。 decimal 类型的大致范围和精度如下表所示。

类型

大致范围

精度

.NET Framework 类型

decimal

(-7.9 x 1028 - 7.9 x 1028) / (100 - 28)

28 到 29 位有效位

System.Decimal


结论
如果只是用于价格、款项之类的数据,SQL SERVER这边可以用smallmoney、money、或者精确一些,用decimal[(p[,s])]来限定整数位数和小数位数。与之相对应,C#这里可以用decimal来赋值。C#里面,decimal类型的话,数值后面要带m或M,如0.01m。
=======================================================================================
网上有高人做了一个列表


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

 


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

(源文章:http://www.cnblogs.com/eng308/archive/2010/06/01/1748824.html)

转载于:https://www.cnblogs.com/leftfist/p/4258013.html

你可能感兴趣的:(SQL SERVER的浮点数类型及与C#的对应关系)