首页 > 解决方案 > TSQL 小数精度舍入

问题描述

我让一位开发人员询问了一些最近更新的数据的精度问题。

他将列的精度从十进制(38,20)更改为十进制(8,4)。

在对表进行更改之前,他运行了这个查询。

UPDATE Rate
SET Rate = ROUND(Rate,4)

更新了,他认为他很好。

然而,经过进一步审查,他发现 73.79999999999999715783 更新为 73.7999。他预计它会四舍五入到 73.8000。

如果我运行以下代码,我会得到预期的结果。

DECLARE @OrigValue DECIMAL(38,20) = 73.79999999999999715783

SELECT @OrigValue, ROUND(@OrigValue, 4)
SELECT @OrigValue, CAST(@OrigValue AS DECIMAL(8,4))

Output:
(No column name)    (No column name)
73.79999999999999715783 73.80000000000000000000

(No column name)    (No column name)
73.79999999999999715783 73.8000

为什么更新语句的结果与选择示例的结果不同?我错过了什么?

标签: sqltsql

解决方案


推荐阅读