数据转换问题

data conversion issue

我有一个 table,其中一个字段是 Real 数据类型。我需要以 #.### 之类的十进制格式显示值。所以我将实际值转换为十进制。但是当我转换为某些值时,它不会产生实际值。例如:- 20.05 是实际值。将其乘以 100,然后将其乘以小数 (9,4) 它将 return 像 2004.9999.

select cast(cast(20.05 as real)*100.00 as decimal(9,4))

为什么会这样 return?

RealFloat 不准确...

即使您看到值为“20.05”,即使您这样输入,也会有微小的差异。

您的值 2004.9999(或类似 2005.00001 的值)是由于此类型的内部表示。

如果您先转换为 decimal,它应该会按预期工作:

select cast(cast(20.05 as real) as decimal(9,4))*100.00

但是你真的应该考虑一下,在什么地方以及为什么使用浮点数...

更新:格式函数

对于 SQL-Server 2012+,您可以使用 FORMAT() function:

SELECT FORMAT(CAST(20.05 AS REAL)*100,'###.0.000')

这将允许您指定格式,您将得到 文本

这对于演示输出(列表、报告)来说很好,但如果您想继续进行某些类型的计算,就不太好了。