sql中的concat使浮点列四舍五入

sql中的concat使浮点列四舍五入,sql,sql-server,Sql,Sql Server,我需要在几个字段(文本和数字)之间连接,并且必须准确。有些字段最初是数字(19,6),我需要它在小数点后只有2位 我在使用以下查询,如果我运行no.1,我在CONCAT_数量中得到一个四舍五入的数字,如:38156.738156.7,在no.2中,我得到的是正确的-476.476.47 为什么会发生这种情况?我如何用最小函数解决这个问题 SELECT 38156.650000 AS AMOUNT, CAST(38156.650000 as float), CONCA

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

我在使用以下查询,如果我运行no.1,我在CONCAT_数量中得到一个四舍五入的数字,如:38156.738156.7,在no.2中,我得到的是正确的-476.476.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

好的,SQL Server在将浮点值转换为字符串时做了一些假设。这并不奇怪。数据库无法打印小数点后的无限位数

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


注意:第一个版本是SQL标准,可以在任何数据库中使用。

好的,所以SQL Server在将浮点值转换为字符串时会做一些假设。这并不奇怪。数据库无法打印小数点后的无限位数

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


注意:第一个版本是SQL标准,可以在任何数据库中使用。

您是否尝试过不使用float?这不应该用于精确的数字——对于四舍五入,您需要使用round。您是否尝试过不使用float?这不应该用于精确的数字——而对于四舍五入,则需要使用四舍五入
select concat(cast(38156.650000 as decimal(10, 2)) . . .
select concat(str(38156.650000, 10, 2) . . .