关注sql
declare @a as float, @b as float
select @a=1.353954 , @b=1.353956
select
CAST(@a as VARCHAR(40)) AS a_float_to_varchar ,
CAST(@b as VARCHAR(40)) AS b_float_to_varchar
结果
a_float_to_varchar b_float_to_varchar
---------------------------------------- ----------------------------------------
1.35395 1.35396
基于
http://msdn.microsoft.com/en-us/library/ms173773.aspx
float具有15位数的精度,因此我不确定为什么在转换为varchar
时该数字被舍入答案 0 :(得分:13)
答案 1 :(得分:4)
在转换为varchar之前强制转换为十进制:
declare @a as float, @b as float
select @a=1.353954 , @b=1.353956
select
CAST(CAST(@a AS DECIMAL(38,18)) as VARCHAR(40)) AS a_float_to_varchar ,
CAST(CAST(@b AS DECIMAL(38,18)) as VARCHAR(40)) AS b_float_to_varchar
答案 2 :(得分:3)
您可以指定样式以包含更多数字。
declare @gg float
set @gg = 124.323125453
SELECT @gg,Convert(varchar, @gg,128)
对于较新版本的sql server使用SELECT @gg,Convert(varchar, @gg,3)
返回
124.323125453 124.323125453
https://msdn.microsoft.com/en-us/library/ms187928.aspx
或使用STR()
declare @gg float
set @gg = 124.323124354234524
SELECT @gg,str(@gg,16,15)
应该给你所有可能的数字。 16是总可能的长度(包括周期),而十进制之后的15个位置是可能的(实际上是0.2323 ... 0计数到长度,所以如果所有数字都小于1则长度需要为17)STR()然而垫前导空格和尾随0的结果。