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 和 smallmoney 限制为小数点后有 4 位。如果需要小数点后有更多位,请使用 decimal 数据类型。
money 或 smallmoney 常量中不允许使用逗号分隔符。只能在显式转换为 money 或 smallmoney 的字符串中指定逗号分隔符。
实例代码
(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。最大存储大小基于精度而变化。
C#中的金额表示
C#中,Numeric(数值)类型有三种:整型、浮点型、Decimal类型。一般情况下可使用Decimal来表示货币数据,decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下表所示。
也可以使用浮点型来表示精度要求不太高的货币数据,浮点型有float和double两种,能表示的精度范围如下表所示:
结论:
在SQL Server中,如果精度(小数点后位数)不确定,一般可以使用Money来表示货币数据,如果小数位数确定,可使用decimal类型,从节省空间的角度来看,尽量使用Money
和smallmoney类型。
SQL Server中的货币类型对应到C#中来可以使用数值类型来表示,主要使用浮点型和decimal类型,精度要求低就是用浮点型,精度要求高就是用Decimal类型。
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 常量中不允许使用逗号分隔符。只能在显式转换为 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 --列名或所提供值的数目与表定义不匹配 |
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#中,Numeric(数值)类型有三种:整型、浮点型、Decimal类型。一般情况下可使用Decimal来表示货币数据,decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下表所示。
类型 | 大致范围 | 精度 | .NET Framework 类型 |
decimal | ±1.0 × 10-28 到 ±7.9 × 1028 | 28 到 29 位有效位 | System.decimal |
类型 | 大致范围 | 精度 | 类型 | 大致范围 |
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类型。
相关文章推荐
- SQL server和C#使用什么类型来记录金额
- 关于SQL Server中的DateTime类型和C#中的DateTime类型的一点小记录
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
- C#、SQL Server中,byte与tinyint类型使用事项
- C#向Sql Server中插入记录时单引号的处理- 使用存储过程 .NET教程,C#语言
- C#中SQL SERVER 2008字符数据类型使用心得
- 使用SQL Server Audit记录数据库变更
- C# 使用Log4Net记录日志(进阶篇)
- 获取SQL Server 2005 中使用到的数据类型
- C#向Sql Server中插入记录时单引号的处理
- sql server对应C#类型
- C# HashSet集合类型使用介绍
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- 基本数据类型对象包装类有什么作用?如何使用?
- SQL Server类型与C#类型对应关系
- 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果
- C#连接4种类型数据库(Access、SQL Server、Oracle、MySQL)
- C#使用Log4Net记录日志(转)
- ASP.NET MVC 2.0 in Vs2010 :使用C# 4.0中使用动态类型来传递ViewData