我们在数据库中存储小数(9,8)。它可以在小数点后面有任意数量的位置(好吧,不超过8)。我很沮丧,因为我想将它显示为人类可读的文本,作为在服务器上创建的更大字符串的一部分。我希望小数点右边的小数与非零一样多,例如:
0.05
0.12345
3.14159265
一切都很好
如果我这样做
CAST(d AS varchar(50))
我的格式如下:
0.05000000
0.12345000
3.14159265
如果我在转换为varchar之前转换/转换为float或其他类型,我会得到类似的输出。我知道如何做一个固定数量的小数位,例如:
0.050
0.123
3.142
但这不是我想要的。
是的,我知道我可以通过复杂的字符串操作(REPLACE等)来做到这一点,应该有一个很好的方法来做到这一点。
答案 0 :(得分:2)
玩游戏(sql server)我发现第一次浮动才能解决问题..
select cast( cast(0.0501000 as float) as varchar(50) )
产量
0.0501
答案 1 :(得分:2)
Code copied almost verbatim from here(还讨论了模式0中浮点格式化的6位数限制):
DECLARE @num3 TABLE (i decimal(9, 8))
INSERT @num3
SELECT 0.05
UNION ALL
SELECT 0.12345
UNION ALL
SELECT 3.14159265
SELECT i
,CASE WHEN PATINDEX('%[1-9]%', REVERSE(i)) < PATINDEX('%.%', REVERSE(i))
THEN LEFT(i, LEN(i) - PATINDEX('%[1-9]%', REVERSE(i)) + 1)
ELSE LEFT(i, LEN(i) - PATINDEX('%.%', REVERSE(i)))
END 'Converted'
FROM @num3
答案 2 :(得分:0)
除了相当直接的操作之外的其他任何东西,我都会考虑在你的调用代码中执行此操作而不是tbh,因为我认为通常最好让SQL从数据库中按原样返回数据,然后保留格式这取决于任何调用它的东西,这可能更适合字符串操作。特别是如果你发现自己跳起来试图实现它。