SQL Server中此SQL查询的正确输出是什么
DECLARE @dt float;
SET @dt = 12345678912345678912345678912345678912;
SELECT
STR(@dt, 50)
输出是:
12345678912345680000000000000000000000
我的问题是在sql server中将float转换为varchar的最佳方法是什么?
答案 0 :(得分:1)
根据MSDN documentation,您无法使用FLOAT
来存储精度超过15位的任何内容,或者它们会被舍入。使用DECIMAL(38)
来获得更高的精确度 - 最多38个,并使用CAST
代替STR
。 STR
将它转换为float然后转换为string,从而破坏了目的。
e.g。
DECLARE @dt DECIMAL(38);
SET @dt = 12345678912345678912345678912345678912;
SELECT
CAST(@dt AS VARCHAR(50))
答案 1 :(得分:0)
你能做的最接近的是38位小数,你可以在下面查看,但如果它超过38位,你仍会丢失一些数字
DECLARE @dt float;
declare @dt1 decimal(38,2)
SET @dt1 = convert(decimal(38,2),123456789123456789123456789123456789.12);
SELECT
convert( varchar(100), @dt1)