float转换字符串问题

夏夜倒骑驴 2011-12-31 11:10:33
数据库表 T 列名 f1(float) 存有小数
f1
---------
1.2345
0.0852585
0
234.155544

需实现功能查询输出数据,非0的输出原始值 , 为0输出空

通过一个存储过程实现:
create table #temptable(
[c1] nvarchar(100)
)

insert into #temptable(c1)
select case f1 when 0 then '' else case(f1 as nvarchar) end as c1 from T
select * from #temptable
drop table #temptable

----------------------------
结果:
c1
-----
1.2345
0.0852585

234.156
-----------------------------
问题是,第一个和第二个小数正常,第三个0也变为了空,但第四个数被四舍五入了,实在没搞明白????
...全文
362 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏夜倒骑驴 2011-12-31
  • 打赏
  • 举报
回复
谢谢: Vidor
搞定
Vidor 2011-12-31
  • 打赏
  • 举报
回复
-- 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(f1 float)
insert into #
select 1.2345 union all
select 0.0852585 union all
select 0 union all
select 234.155544

select *, case f1 when 0 then '' else convert(varchar,f1,128) end s1 from #

/*
f1 s1
---------------------- ------------------------------
1.2345 1.2345
0.0852585 0.0852585
0
234.155544 234.155544
*/
夏夜倒骑驴 2011-12-31
  • 打赏
  • 举报
回复
to:1楼, 特殊情况,需要输入不固定小数位,所以用了float
SSXYC 2011-12-31
  • 打赏
  • 举报
回复
ltrim删除空格的
夏夜倒骑驴 2011-12-31
  • 打赏
  • 举报
回复
to: 3楼
select ltrim(cast(@i as decimal(38,10)))

/*****************


-----------------------------------------
234.1555440000

----------------------------------------------------------------
用 ltrim or rtrim 怎么不能去掉后面的0呢, 要的结果是234.155544
dawugui 2011-12-31
  • 打赏
  • 举报
回复
float 和 real
用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。

语法
float [ ( n ) ]

从 - 1.79E + 308 到 1.79E + 308 之间的浮点数字数据。n 为用于存储科学记数法 float 数尾数的位数,同时指示其精度和存储大小。n 必须为从 1 到 53 之间的值。

n 所在范围 精度 存储大小
1-24 7 位数 4 字节
25-53 15 位数 8 字节


Microsoft® SQL Server™ float[(n)] 数据类型对于从 1 到 53 之间的所有 n 值均符合 SQL-92 标准。double precision 的同义词为 float(53)。

real

从 ?3.40E + 38 到 3.40E + 38 之间的浮点数字数据。存储大小为 4 字节。在 SQL Server 中,real 的同义词为 float(24)。

AcHerat 2011-12-31
  • 打赏
  • 举报
回复

declare @i float
set @i = 234.155544

select ltrim(cast(@i as decimal(38,10)))

/*****************


-----------------------------------------
234.1555440000

(1 行受影响)


AcHerat 2011-12-31
  • 打赏
  • 举报
回复
先转为小数点位数较多的精度型的小数,例如decimal(38,10),然后转为字符型,把后面跟的0去掉。
dawugui 2011-12-31
  • 打赏
  • 举报
回复
float是非准确性数据类型,建议使用numeric \decimal

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧