如何删除尾随零和前导零,然后在不舍入的情况下转换为十进制



如何将000000000000000001764705转换为1.76?

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

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

让我解释一下:首先,当你把它转换成任何十进制或数字时,所有前导零都会截断,因为在数字情况下,前导零没有值。第二,我们把它除以1000000,因为正如user2618885所说,小数点总是从右边起6个位置,然后我们把它四舍五入到小数点后2位,但它不会把它截断到小数点前2位,而是只把后面的零放在小数点后两位,比如"1.760000"四舍五入,再次将其反转到原始位置,这可以用另一种方式完成,也可以使用子字符串、填充等……但我在这里使用了反转和舍入。

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

例如

DECLARE @number VARCHAR(255) = '000000000000000001764705'
SELECT CAST(STUFF(@number, len(@number)-5, 0, '.') as DECIMAL(18,2))

/*
RESULT
---------------------------------------
1.76
(1 row(s) affected)
*/

基于JLampon对此的评论链接:

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