Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中处理varchar中的小数时使用ROUND()_Sql_Sql Server_Tsql - Fatal编程技术网

在SQL Server中处理varchar中的小数时使用ROUND()

在SQL Server中处理varchar中的小数时使用ROUND(),sql,sql-server,tsql,Sql,Sql Server,Tsql,我知道Round()的用法,它可以很好地用于 select round(147.26719,5,1) 返回147.26719 目前,我正在处理一个从txt文件导入的表,因此当我使用round()处理varchar中的十进制时,所有列都是varchar select round('147.26719',5,1) 非常奇怪,它返回147.26718 我将使其正确运行 select round(cast('147.26719', decimal(11,6)),5,1) 但有人能解释一下为什么会发

我知道Round()的用法,它可以很好地用于

select round(147.26719,5,1)
返回147.26719

目前,我正在处理一个从txt文件导入的表,因此当我使用
round()
处理varchar中的十进制时,所有列都是
varchar

select round('147.26719',5,1)
非常奇怪,它返回147.26718

我将使其正确运行

select round(cast('147.26719', decimal(11,6)),5,1)
但有人能解释一下为什么会发生这种情况吗?我相信当将varchar隐式转换为十进制时,会出现这种情况,但我不知道为什么


预先感谢

默认情况下,
round()
的字符串隐式转换为
浮点值
,而不是十进制值。浮点数是不精确的,可能和你所看到的相差一点点,但足够重要了

您的解决方案是正确的--转换为十进制

通过使用以下代码,您可以很容易地看到这一点:

select round('123.3', 1) as col
into x;

select *
from information_schema.columns
where table_name = 'x';

或者,
选择SQL_Variant_属性(Round('123.3',1),'BaseType')。谢谢!这就解释了