Sql server 从float转换为varchar时,我正在丢失精度
我正在使用Sql Server 2012 我有两张桌子:Sql server 从float转换为varchar时,我正在丢失精度,sql-server,variables,precision,varchar,Sql Server,Variables,Precision,Varchar,我正在使用Sql Server 2012 我有两张桌子: Create table tbl1 (formula varchar(50)) Insert into tbl1 values ('A-B') Create table tbl2 (A float(53), B float(53)) Insert into tbl2 values (12.2466654, 11.7543289) 我正在尝试将结果作为变量@result: Declare @result varchar(250);
Create table tbl1 (formula varchar(50))
Insert into tbl1 values ('A-B')
Create table tbl2 (A float(53), B float(53))
Insert into tbl2 values (12.2466654, 11.7543289)
我正在尝试将结果作为变量@result
:
Declare @result varchar(250);
Declare @a varchar(50);
Declare @b varchar(50);
Select @a = a from tbl2;
Select @b = b from tbl2;
Set @result = replace(tbl1, 'A', Cast(@A as float(53));
Set @result = replace(tbl1, 'B', Cast(@B as float(53));
当我从@result
中选择时,我得到了类似12.2-11.8的结果,因此它几乎不错,但精度正在下降
也许您知道如何正确编写查询?有什么原因不能使用十进制而不是浮点?浮动可能会导致精度损失
转换为VARCHAR()时,请尝试使用STR()而不是CAST()。这来自于转换浮点数和读取数据
这为我生成了字符串“12.24666654-11.7543289”。Wel我认为在这种情况下,我可以创建包含十进制格式列的中间表,并从tbl2导入所有数据。然后处理新表中的数据您是否希望tbl1中的值为0.4923365或字符串“12.2466654-11.7543289”。如果只是字符串,那么使用STR()应该可以解决问题[STR(tbl2.A,10,8)+'-'+STR(tbl2.B,10,8)]。如果希望得到0.4923365,则需要考虑浮点数据类型的精度损失。为了证明精度的不足,当我执行[CAST(12.24666654作为浮点)-CAST(11.7543289作为浮点)]时,我在SQL Server 2012实例上返回了0.49233649999999。我需要将其表示为字符串!明天我会试试的!谢谢你的帮助
DECLARE @result varchar(250);
SELECT @result = STR( tbl2.A, 10,8) + '-' + STR( tbl2.B, 10,8)
FROM tbl2;
PRINT @result;