Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
货币值的SQL数据类型,最多保留15位小数_Sql_Sql Server 2008_Sqldatatypes - Fatal编程技术网

货币值的SQL数据类型,最多保留15位小数

货币值的SQL数据类型,最多保留15位小数,sql,sql-server-2008,sqldatatypes,Sql,Sql Server 2008,Sqldatatypes,我需要存储并对货币值进行一些基本计算(主要是乘法),如0.00005756,0.01,0.000000000000123,等等。小数点的最大位数是15位,但另一边也可能有相当大的数字。如果左侧有一个以上的0,则不太可能使用超过2个小数位,但这是可能的。我遇到过的问题是当数字超过小数点后2位时 我创建了一个测试表并插入了一些基本数据。不幸的是,它似乎不能存储非常小的数字 注意:我将money2列创建为[decimal](18,4)列,因为在我研究货币值的用途时,这似乎是推荐的。但是,我需要15位小

我需要存储并对货币值进行一些基本计算(主要是乘法),如
0.00005756
0.01
0.000000000000123
,等等。小数点的最大位数是15位,但另一边也可能有相当大的数字。如果左侧有一个以上的
0
,则不太可能使用超过2个小数位,但这是可能的。我遇到过的问题是当数字超过小数点后2位时

我创建了一个测试表并插入了一些基本数据。不幸的是,它似乎不能存储非常小的数字

注意:我将
money2
列创建为
[decimal](18,4)
列,因为在我研究货币值的用途时,这似乎是推荐的。但是,我需要15位小数,这就是
money1
存在的原因

表格创建:

  CREATE TABLE [dbo].[MoneyTest](
        [id] [int] IDENTITY(1,1) NOT NULL,
        [money1] [decimal](18, 15) NULL,
        [money2] [decimal](18, 4) NULL,
     CONSTRAINT [PK_uMoneyTest] PRIMARY KEY CLUSTERED 
    (
        [id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

insert into moneytest 
(money1, money2) values
(£0.01,£0.01)

insert into moneytest 
(money1, money2) values
(£0.000000000000123,£0.000000000000123)

insert into moneytest 
(money1, money2) values
(£0.00005756,£0.00005756)
select*from moneytest
返回以下结果:

id  money1              money2
7   0.010000000000000   0.0100
8   0.000000000000000   0.0000
9   0.000100000000000   0.0001
不过,我期待着这些结果:

id  money1              money2
7   0.010000000000000   0.0100
8   0.000000000000123   0.0000
9   0.000575600000000   0.0001
特别是,行id 9似乎向上舍入到1(小数点4处),而不是显示实际数字。我认为只有在使用浮点列估计数字时才会发生这种情况,小数点应该更准确


这只是一个数据类型问题还是我根本不应该在数据库中解决的问题?

问题是磅符号。这意味着这些值被读取为
money
——精度不够高。因此,您正在丢失小数点

只需删除货币符号:

insert into moneytest (money1, money2)
    values (0.000000000000123, 0.000000000000123);
他是一把小提琴