在SQL Server中存储数字11.111的最有效方式

问题描述:

哪种数据类型最有效地存储数字,例如11.111。在SQL Server中存储数字11.111的最有效方式

这些数字在点前有两位数,最多三位。

目前该列是'bigint',我猜测这将需要更改为小数或浮点数。

任何帮助非常感谢。

感谢

+0

表示是否需要精确? – 2009-11-16 02:15:20

+0

等一下。整数怎么样?是不是浮动? 11.111是否浮动? – DarthVader 2009-11-16 02:16:20

+0

是的,它需要精确到点后的3分 – Chin 2009-11-16 02:19:37

Bigint是一个整型数据类型,所以是的,没有一些预处理步法就无法工作。你需要精确地存储值,还是只需要大概?二进制浮点类型(float,real)是高效且紧凑的,但并不完全代表许多十进制值,所以比较并不总是能给出您期望的结果,并且会累积错误。 decimal是一个不错的选择。精度5和标度3的小数(满足您的要求)消耗5个字节。

请参阅有关十进制数据类型here的文档以及一般数据类型here

+0

我很难选择正确的答案,但我发现这是最有帮助的。也许我的问题措辞不是很好。谢谢 – Chin 2009-11-16 04:25:41

我认为你有两个选择:乘以1000并存储为一个int(和出路划分),或者只是存储为双。随着内存和硬盘空间变得如此便宜,它可能不值得进一步优化的麻烦。

+0

当你说双倍你的意思是一个浮动权吗?谢谢您的帮助。 – Chin 2009-11-16 03:46:45

如果您需要确切的表示形式,smallmoney数据类型使用4个字节。

这相当于使用一个int(4字节),并执行乘法/除法来处理小数位。

+0

不要认为它变得比这小 – Amirshk 2009-11-16 02:28:02

使用十进制数据类型来设定确切的精度:

decimal(5,3) 
+0

使用5个字节....... – 2009-11-16 02:20:59

+0

是的,所以smallmoney – 2009-11-16 02:27:55

+0

smallmoney是4字节:http://msdn.microsoft.com/en-us/library/ms179882。 aspx – RickNZ 2009-11-16 16:01:52

你应该使用十进制数据类型。它存储精确的浮点数

DECLARE @d decimal(5, 3) 
SET @d=12.671 
SELECT @d, DATALENGTH(@d) 

正如@Mitch指出的那样,这将是5个字节大小。您需要额外支付一个字节,以便更轻松地计算值。

+1

使用5个字节....... – 2009-11-16 02:20:26

+1

..并且应该是DECIMAL(5,3) – 2009-11-16 02:21:37