数据转换问题
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?
Real
或 Float
不准确...
即使您看到值为“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')
这将允许您指定格式,您将得到 文本。
这对于演示输出(列表、报告)来说很好,但如果您想继续进行某些类型的计算,就不太好了。
我有一个 table,其中一个字段是 Real 数据类型。我需要以 #.### 之类的十进制格式显示值。所以我将实际值转换为十进制。但是当我转换为某些值时,它不会产生实际值。例如:- 20.05 是实际值。将其乘以 100,然后将其乘以小数 (9,4) 它将 return 像 2004.9999.
select cast(cast(20.05 as real)*100.00 as decimal(9,4))
为什么会这样 return?
Real
或 Float
不准确...
即使您看到值为“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')
这将允许您指定格式,您将得到 文本。
这对于演示输出(列表、报告)来说很好,但如果您想继续进行某些类型的计算,就不太好了。