哪种数据类型最有效存储数字,例如11.111。
这些数字在该点之前有2位数字,之后最多有3位数。
目前该列是'bigint',我猜这需要更改为小数或浮点数。
任何帮助都非常感激。
感谢
答案 0 :(得分:5)
如果需要精确表示,smallmoney数据类型使用4个字节。
这相当于使用int(4个字节),并执行乘法/除法来处理小数位。
答案 1 :(得分:2)
我认为你有两个选择:乘以1000并存储为int(并在出路上划分),或者只存储为double。由于内存和驱动器空间非常便宜,因此可能不值得为进一步优化而烦恼。
答案 2 :(得分:2)
您应该使用DECIMAL数据类型。它存储精确的浮点数
DECLARE @d decimal(5, 3)
SET @d=12.671
SELECT @d, DATALENGTH(@d)
正如@Mitch所指出的,这将是5个字节的大小。您需要支付额外的字节,以便使用该值进行更轻松的计算。
答案 3 :(得分:1)
Bigint是一个整数数据类型,所以是的,没有一些预处理步法就行不通。您是需要精确存储值还是仅存储大约?二进制浮点类型(float
,real
)是高效且紧凑的,但并不完全代表许多十进制值,因此比较并不总能满足您的期望,并且错误会累积。 decimal
是一个不错的选择。精度5和刻度3(满足您的要求)的十进制消耗五个字节。
答案 4 :(得分:0)
使用小数数据类型设置精确的精度:
decimal(5,3)