一尘不染

获取浮点小数点后的位数(带或不带小数部分)

sql

Amount (float)我的表中有以下列表。

Amount
123
123.1
123.0123
123.789456

我怎样才能得到小数点后的位数。

重复?: 我已经检查了现有的帖子,但是没有正确的方法来处理 float 数字 with or without decimal part

结果

Amount      Result
123         0
123.1       1
123.0123    4
123.789456  6

编辑
:花了一些宝贵的时间后,我发现了一些相对简单的脚本来处理此问题。


阅读 222

收藏
2021-03-10

共1个答案

一尘不染

我找到了一些简单的脚本(相对于我而言)来处理此问题。

ISNULL(NULLIF(CHARINDEX('.',REVERSE(CONVERT(VARCHAR(50), Amount, 128))),0) - 1,0)

此处ISNULL(NULLIF仅用于处理不带小数部分的浮点数。如果没有没有小数部分的值,那么这很简单

CHARINDEX('.',REVERSE(CONVERT(VARCHAR(50), Amount, 128))) -1

希望对您有帮助。完整脚本如下

declare @YourTable table (Amount float)
insert into @YourTable
values(123),(123.1),(123.0123),(123.789456)

SELECT  ISNULL(NULLIF(CHARINDEX('.',REVERSE(CONVERT(VARCHAR(50), Amount, 128))),0) - 1,0)
FROM    @YourTable

SELECT  CHARINDEX('.',REVERSE(CONVERT(VARCHAR(50), Amount, 128))) -1 
FROM    @YourTable
2021-03-10