【发布时间】:2017-01-06 05:43:13
【问题描述】:
如何在sql server 2008中找出小数点后的位数。
假设值为 10.12365479
我想知道小数点后的位数。
注意:该列的类型为 FLOAT。
【问题讨论】:
-
你检查过这个解决方案了吗:stackoverflow.com/questions/14715141/…
标签: sql sql-server sql-server-2008
如何在sql server 2008中找出小数点后的位数。
假设值为 10.12365479
我想知道小数点后的位数。
注意:该列的类型为 FLOAT。
【问题讨论】:
标签: sql sql-server sql-server-2008
我会使用 STR + REPLACE + LEN + CHARINDEX 函数。检查下面的中间结果以了解其工作原理。
declare @V float = 10.12365479;
SELECT
@V AS v
,STR(@V, 50, 16) AS v_str
,REPLACE(STR(@V, 50, 16), '0', ' ') AS v_replace
,LEN(REPLACE(STR(@V, 50, 16), '0', ' ')) AS v_len
,CHARINDEX('.', STR(@V, 50, 16)) AS v_idx
,LEN(REPLACE(STR(@V, 50, 16), '0', ' ')) -
CHARINDEX('.', STR(@V, 50, 16)) AS decimal_digits
结果为 8
+-------------+----------------------------------------------------+----------------------------------------------------+-------+-------+----------------+
| v | v_str | v_replace | v_len | v_idx | decimal_digits |
+-------------+----------------------------------------------------+----------------------------------------------------+-------+-------+----------------+
| 10.12365479 | 10.1236547900000000 | 1 .12365479 | 42 | 34 | 8 |
+-------------+----------------------------------------------------+----------------------------------------------------+-------+-------+----------------+
显然,答案通常是 16(可能的最大值),因为您的浮点值将表示为 10.1236547899999999。
【讨论】: