修改SQL有效数字函数:返回带尾随零的VARCHAR类型结果
修改SQL有效数字取整函数以保留尾随零
我正在修改一款SQL函数,它原本用于按指定有效数字位数取整,当前返回float类型,但我需要让结果保留有效数字对应的尾随零。例如当保留2位有效数字时:
2153.012 -> "2200" 123.361 -> "120" 12.331 -> "12" 1.014 -> "1.0" 0.804 -> "0.80" 0.0011 -> "0.0011" 0.001 -> "0.0010"
有效数字说明
有效数字用于区分零是占位符还是实际有效数值:
- 对于小于1的数字:小数点后紧跟的零是占位符,末尾的零是有效数值。例如
0.0010表示1后的零是真实有效数值;若保留3位有效数字,则需写成0.00100。 - 对于大于1的数字:若不明确有效数字位数,无法判断零的属性。比如2000中的零是占位符还是有效数值?
补充示例
大数示例
| 测量值 | 1位有效数字 | 2位有效数字 | 3位有效数字 | 4位有效数字 | 5位有效数字 |
|---|---|---|---|---|---|
| 80125.01255 | 80000 | 80000 | 80100 | 80130 | 80125 |
| 8012.01255 | 8000 | 8000 | 8010 | 8012 | 8012.0 |
| 801.012555 | 800 | 800 | 8.01 | 801.0 | 801.01 |
| 80.01255 | 80 | 80 | 80.0 | 80.01 | 80.013 |
| 8.01255 | 8 | 8.0 | 8.01 | 8.013 | 8.0126 |
小数示例
| 测量值 | 1位有效数字 | 2位有效数字 | 3位有效数字 | 4位有效数字 | 5位有效数字 |
|---|---|---|---|---|---|
| 0.100362 | 0.1 | 0.10 | 0.100 | 0.1004 | 0.10036 |
| 0.010362 | 0.01 | 0.010 | 0.0104 | 0.01036 | 0.010362 |
| 0.001036 | 0.001 | 0.0010 | 0.00104 | 0.001036 | 0.0010360 |
| 0.000103 | 0.0001 | 0.00010 | 0.000103 | 0.0001030 | 0.00010300 |
| 0.000010 | 0.00001 | 0.000010 | 0.0000100 | 0.00001000 | 0.000010000 |
| 0.000001 | 0.000001 | 0.0000010 | 0.00000100 | 0.000001000 | 0.0000010000 |
原函数代码
CREATE FUNCTION RoundSigFig(@Number float, @Figures int) RETURNS float AS BEGIN DECLARE @Answer float; SET @Answer = ( SELECT CASE WHEN intPower IS NULL THEN 0 ELSE FLOOR(fltNumber * POWER(CAST(10 AS float), intPower) +0.5) *POWER(CAST(10 AS float), -intPower) END AS ans FROM ( SELECT @Number AS fltNumber, CASE WHEN @Number > 0 THEN -((CEILING(LOG10(@Number)) -@Figures)) WHEN @Number< 0 THEN -((FLOOR(LOG10(@Number)) -@Figures)) ELSE NULL END AS intPower ) t ); RETURN @Answer; END
该函数的取整功能正常,但我尝试使用FORMAT函数和多个CASE表达式来补全所需的尾随零,并将返回值改为VARCHAR类型,始终无法实现预期效果。
内容的提问来源于stack exchange,提问作者user21933271
相关产品推荐
相关产品推荐

