zoukankan      html  css  js  c++  java
  • SQL server和C#使用什么类型来记录金额

    今天的一个小讨论,关于SQL serverC#使用什么类型来记录金额。

     

    SQL server里的金额表示

    1Money类型

    SQL Server里使用Moneysmallmoney类型来表示货币类型,Money8字节的,smallmoney4字节的。

    如果一个对象被定义为 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

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

     

    2Decimal类型

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

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

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

    p(精度)

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

    (小数位数)

    小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 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

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

    类型

    大致范围

    精度

    类型

    大致范围

    float

    ±1.5e−45 ±3.4e38

    float

    ±1.5e−45  ±3.4e38

    double

    ±5.0e−324 ±1.7e308

    15  16

    double

    ±5.0e−324  ±1.7e308

     

  • 相关阅读:
    (二十)WebGIS中图层树功能的设计和实现
    WebGIS中矢量切图的初步研究
    百度兴趣点下载工具设计和实现
    服务端常规知识详解
    Shp数据批量导入Postgresql工具的原理和设计
    浅谈C#中一种类插件系统编写的简单方法(插件间、插件宿主间本身不需要通信)
    从底层开发谈WebGIS中实现地理长度固定的可视窗口的思路和方法
    用存储过程判断某个人员在一天的行进轨迹中是否有超过指定时间的停留
    Linux启动与禁止SSH用户及IP的登录
    JVM中的垃圾回收
  • 原文地址:https://www.cnblogs.com/tongdengquan/p/6090544.html
Copyright © 2011-2022 走看看