为什么我的十进制值在 SQL 插入中被四舍五入为整数?

新手上路,请多包涵

我正在使用 SQL Server Management Studio 并具有以下架构:

 CREATE TABLE tmp(
    id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
    toleranceRegion DECIMAL
)

然后我执行以下插入:

 INSERT INTO tmp VALUES(3.2);
INSERT INTO tmp VALUES(5.678);
INSERT INTO tmp VALUES(1.95);

预期输出:

 id  toleranceRegion
--  ---------------
1   3.2
2   5.678
3   1.95

实际输出:

 id  toleranceRegion
--  ---------------
1   3
2   6
3   2

为什么插入的 toleranceRegion 值被四舍五入到最接近的整数?

原文由 Adam Freymiller 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 706
2 个回答

您没有为小数定义比例/精度。如果您想要小数点后 3 位数字,则应将其定义为 DECIMAL(9,3),这将为您提供小数点前 6 位和最多 3 位的小数。 您需要分析预期数据并根据预期为列定义指定正确的精度和比例。

 CREATE TABLE tmp(
    id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
    toleranceRegion DECIMAL(9,3)
)

此处查看十进制 的 Sql Server 文档。

原文由 Igor 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是因为您没有设置 scale ,这意味着系统使用的是默认比例零:

s(刻度) 将存储在小数点右侧的小数位数。从 p 中减去该数字以确定小数点左侧的最大位数。小数点右侧可以存储的最大小数位数。比例必须是从 0 到 p 的值。仅当指定精度时才能指定比例。 默认比例为 0 。 (重点补充)

换句话说, SQL Server 在小数点右侧存储零位

原文由 Sergey Kalinichenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进