首页 > 解决方案 > 结果是什么

问题描述

以下查询给出的输出为 123.5

SELECT STR(123.45, 6, 1);  
GO

但是.. 以下查询给出的输出为 123.3

SELECT STR(123.35, 6, 1);  
GO

为什么它没有给出 123.4 的结果?

SELECT STR(123.45, 6, 1);  
GO

SELECT STR(123.35, 6, 1);  
GO

以下查询给出的输出为 123.3

SELECT STR(123.35, 6, 1);  
GO

为什么它没有给出 123.4 的结果?

标签: sqlsql-server

解决方案


从SQL Server函数的文档中:STR

【第一个参数】是带小数点的近似数值(float)数据类型的表达式。

从我的本地测试来看,即使我传入了一个DECIMAL值,您看到的不精确仍然会继续,并且输入参数仍然被视为浮点数。那是:

SELECT STR(CAST(123.45 AS DECIMAL(10,2)), 6, 1)

仍然返回123.5

如果您想在 SQL Server 中精确截断一个数值,那么只需尝试转换为一种DECIMAL类型,例如

SELECT CAST(123.45 AS DECIMAL(10,1))

123.4如您所料返回。


推荐阅读