在循环浮点列的sql中连接

时间:2015-06-07 15:20:50

标签: sql sql-server

我需要在几个字段(文本和数字)之间连接,并且它必须准确。有些字段最初是数字(19,6),我需要它在小数点后只有2位数。

我使用以下查询,如果我没有运行。 1我在CONCAT_AMOUNT中得到一个如下四舍五入的数字:38156.738156.7和no。 2我说得对 - 476.47476.47。

为什么会发生这种情况?如何以最少的功能解决这个问题?

SELECT 
    38156.650000 AS AMOUNT, 
    CAST(38156.650000 as float), 
    CONCAT(cast(38156.650000 as float), 
           cast(38156.650000 as float)) AS CONCAT_AMOUNT

SELECT 
    467.47 AS AMOUNT, 
    CAST(467.47 as float), 
    CONCAT(cast(467.47 as float), 
           cast(467.47 as float)) AS CONCAT_AMOUNT

1 个答案:

答案 0 :(得分:1)

好的,所以SQL Server在将浮点值转换为字符串时会做出一些假设。这不应该是令人惊讶的。数据库无法打印小数点后的无限位数。

所以,有两个简单的选择:转换为十进制或使用str()

select concat(cast(38156.650000 as decimal(10, 2)) . . .

select concat(str(38156.650000, 10, 2) . . .

注意:第一个版本是SQL标准,应该适用于任何数据库。