您的位置:首页 > 数据库

SQL server和C#使用什么类型来记录金额

2010-12-03 16:12 281 查看
今天的一个小讨论,关于SQL server和C#使用什么类型来记录金额。

SQL server里的金额表示

(1)Money类型

SQL Server里使用Money和smallmoney类型来表示货币类型,Money是8字节的,smallmoney是4字节的。

如果一个对象被定义为 money,则它最多可以包含 19 位数字,其中小数点后可以有 4 位数字。该对象使用 8 个字节存储数据。因此,money 数据类型的精度是 19,小数位数是 4,长度是 8。

数据类型

范围

长度

Money

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

8字节

Smallmoney

214,748.3648 到 214,748.3647

4字节

money 和 smallmoney 限制为小数点后有 4 位。如果需要小数点后有更多位,请使用 decimal 数据类型。

money 或 smallmoney 常量中不允许使用逗号分隔符。只能在显式转换为 money 或 smallmoney 的字符串中指定逗号分隔符。

实例代码

USE tempdb;

GO

CREATE TABLE Test (num INT PRIMARY KEY, summary MONEY);

GO

SET NOCOUNT ON;

GO

-- 插入数据到临时表

INSERT INTO Test VALUES (1, $123.45);

GO

INSERT INTO Test VALUES (2, $123123.45);

GO

INSERT INTO Test VALUES (3, CAST('$444,123.45' AS MONEY) );

GO

-- 插入错误示例,分隔符是字符串类型

INSERT INTO TestMoney VALUES (3, $555,123.45);

GO

SET NOCOUNT OFF;

GO

SELECT * FROM Test;

GO

--返回错误信息

--Msg 213, Level 16, State 1, Line 3

--列名或所提供值的数目与表定义不匹配

(2)Decimal类型

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

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

固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(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

C#中的金额表示

C#中,Numeric(数值)类型有三种:整型、浮点型、Decimal类型。一般情况下可使用Decimal来表示货币数据,decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下表所示。

类型

大致范围

精度

.NET Framework 类型

decimal

±1.0 × 10-28 到 ±7.9 × 1028

28 到 29 位有效位

System.decimal

也可以使用浮点型来表示精度要求不太高的货币数据,浮点型有float和double两种,能表示的精度范围如下表所示:

类型

大致范围

精度

类型

大致范围

float

±1.5e−45 到 ±3.4e38

7 位

float

±1.5e−45 到 ±3.4e38

double

±5.0e−324 到 ±1.7e308

15 到 16 位

double

±5.0e−324 到 ±1.7e308

结论

在SQL Server中,如果精度(小数点后位数)不确定,一般可以使用Money来表示货币数据,如果小数位数确定,可使用decimal类型,从节省空间的角度来看,尽量使用Money

和smallmoney类型。

SQL Server中的货币类型对应到C#中来可以使用数值类型来表示,主要使用浮点型和decimal类型,精度要求低就是用浮点型,精度要求高就是用Decimal类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐