如何在SQL Server中存储十进制值?

问题描述 投票:0回答:8

我正在尝试找出 SQL Server 中列的十进制数据类型。我需要能够存储 15.5、26.9、24.7、9.8 等值

我将

decimal(18, 0)
分配给列数据类型,但这不允许我存储这些值。

正确的做法是什么?

sql sql-server types decimal
8个回答
535
投票

DECIMAL(18,0)
将允许小数点后 0 位。

使用像

DECIMAL(18,4)
这样的东西来代替应该就可以了!

这将为您提供总共 18 位数字,其中小数点后 4 位(小数点前 14 位)。


144
投票

您应该使用如下:

DECIMAL(m,a)

m
是小数点可以有的总位数。

a
是小数点后可以保留的最大位数。


47
投票

Decimal
的设置是其精度和小数位,或者用普通语言来说,一个数字可以有多少位,以及您希望小数点右边有多少位。

因此,如果您将

PI
放入
Decimal(18,0)
中,它将被记录为
3

如果将

PI
放入
Decimal(18,2)
中,它将被记录为
3.14

如果将

PI
放入
Decimal(18,10)
则记录为
3.1415926535


39
投票

大多数时候,我使用decimal(9,2),它在sql十进制类型中占用最少的存储空间(5字节)。


精度=>存储字节

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

它可以存储从0到9 999 999.99(前面7位+小数点后面2位=总共9位),这对于大多数值来说已经足够了。


12
投票

你可以试试这个

decimal(18,1)

数字长度总共为18位。小数点后的数字长度只能为1位,不能超过1位。


7
投票

在 MySQL DB 中

decimal(4,2)
总共只允许输入 4 位数字。正如您在
decimal(4,2)
中看到的,这意味着您总共可以输入4位数字,其中小数点后保留两位数字。

因此,如果您在 MySQL 数据库中输入 100.0,它将显示类似“列的值超出范围”的错误。

因此,您只能输入以下范围:从 00.00 到 99.99。


3
投票

其他答案是正确的。假设您的示例反映了您想要的全部可能性,那就是

DECIMAL(3, 1)
。或者,
DECIMAL(14, 1)
总共允许 14 位数字。你的工作就是思考什么就足够了。


1
投票
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
© www.soinside.com 2019 - 2024. All rights reserved.