如何删除尾随和前导零,然后转换为小数而不进行舍入

时间:2014-08-26 20:23:59

标签: sql-server-2008

如何将000000000000000001764705转换为1.76?

3 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点......

select reverse(round(reverse(round(cast(000000000000000001764705 as decimal)/1000000,2)),1))

让我解释一下:首先,当你将它转换为任何小数或数字时,所有前导零都将截断,因为在数字情况下,前导零没有值。第二个我们把它除以1000000因为用户2618885提到十进制将始终是从右边的6个位置然后我们将其四舍五入到小数点后的2位但它不会将它截断到小数点后的2位而不是它只会放置尾随在2位小数之后的零点,如#34; 1.76000000"。第三个尝试通过反转它然后将它倒圆并再次将其反转到原始位置来移除2位小数之后的零,这也可以通过使用子串,东西等以另一种方式完成...但我在这里使用反向和圆形。

答案 1 :(得分:0)

基于JLampon对this的评论链接:

declare @data as varchar(24)
set @data = '000000000000000001764705'
print round(cast(@data as float) / 1000000,2,1)

答案 2 :(得分:0)

您可以使用STUFF在所需位置插入小数。然后CAST将其转换为十进制。

e.g。

DECLARE @number VARCHAR(255) = '000000000000000001764705'

SELECT CAST(STUFF(@number, len(@number)-5, 0, '.') as DECIMAL(18,2))


/*
RESULT

---------------------------------------
1.76

(1 row(s) affected)

*/