如何去除小数位多余的0,有其他办法完美些解决吗?
在网上找了好几种方法都不是很理想
eg:
select cast( '12.000 ' as float)
这样的结果是12.0
declare @s varchar(20)
set @s= '12.120001 '
select reverse(cast(cast(reverse(@s) as float)as varchar))
declare @s varchar(20)
set @s= '12.120001 '
select reverse(cast(reverse(@s) as float))
这样的结果有错是
120001
有其他办法完美些解决吗?
------解决方案--------------------declare @s varchar(20)
set @s= '12.120001 '
select substring(convert(varchar,@s)+ '00 ',1,charindex( '. ',convert(varchar,@s)+ '00 ')+2)
--结果
--------------------------------
12.12
------解决方案--------------------declare @s varchar(20)
set @s= '1200.000 '
select left(@s,len(@s)-PATINDEX( '%[^0]% ',reverse(@s))+1)--如果不允许整数后有小数点用下面的
select case when @s=FLOOR(@s) then left(@s,charindex( '. ',@s)-1) else left(@s,len(@s)-PATINDEX( '%[^0]% ',reverse(@s))+1) end
------解决方案--------------------没明白楼主要实现什么功能?
给出例子,给出结果。
还有ceiling等函数可以尝试一下。
------解决方案--------------------CREATE function dbo.f_mydecimal(@str varchar(1000))
returns varchar(50)
as
begin
declare @ret varchar(100)
--@num_afterDot
--@num_beforeDot
declare @num_afterDot int,@num_beforeDot varchar(100)
set @num_afterDot=reverse(convert(int,substring(reverse(@str),0,charindex( '. ',reverse(@str)))))
set @num_beforeDot=substring(@str,0,charindex( '. ',@str))
set @ret=@num_beforeDot+
case @num_afterDot when 0 then ' '
else '. '+convert(varchar,@num_afterDot)
end
return @ret
end
GO
------解决方案--------------------看楼主举的例子,都是把字符转换成float,再处理显示问题
如果转换成 float 是必须的,或者是楼主存储的数据本来就是 float 类型
则这个问题基本上无解, 因为 float 存储的本来就是非精度数据, 不能保证 100% 还原(有时候有很微小的误差),既然数据都不能 100% 还原到存储之前, 所以也无法得到楼主想要的结果