You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查real类型数值小数点后是否有有效数字并按原格式输出

核心问题原因

  1. 取模报错是因为%运算符仅支持int、decimal这类精确数值类型,real是近似浮点类型,原生不支持取模运算。
  2. 之前CASE表达式写法无效,是因为SQL会将CASE所有返回分支隐式转换为精度最高的类型:你一个分支返回普通decimal、一个返回decimal(10,2),最终所有结果都会统一为decimal(10,2),自然都带两位小数。

解决方案

方案1:FORMAT函数(SQL Server 2012及以上版本,最简写法)

FORMAT的0.##格式符会自动适配小数位:整数不显示小数位,有小数时最多保留2位,完全匹配你的需求。

-- 小数点用点号,输出结果:185、193.5、80
FORMAT(CAST(GWF_Score AS DECIMAL(10,2)), '0.##') AS [@points]

-- 小数点用逗号,和你表中格式完全一致,输出结果:185、193,5、80
FORMAT(CAST(GWF_Score AS DECIMAL(10,2)), '0.##', 'de-DE') AS [@points]

方案2:CASE判断兼容低版本SQL Server

如果数据库版本不支持FORMAT函数,先将real转为精确decimal类型再判断,最终输出字符串保留格式即可:

CASE
    -- 转成decimal后判断是否为整数
    WHEN CAST(GWF_Score AS DECIMAL(10,2)) = FLOOR(CAST(GWF_Score AS DECIMAL(10,2)))
    THEN CAST(CAST(GWF_Score AS INT) AS VARCHAR(20))
    -- 非整数场景去掉末尾多余的.00,需要逗号的话把替换规则改成',00'即可
    ELSE REPLACE(CAST(CAST(GWF_Score AS DECIMAL(10,2)) AS VARCHAR(20)), '.00', '')
END AS [@points]

注意事项

  • 必须先将real类型转成decimal再做运算,避免浮点精度误差导致判断错误。
  • 最终输出为字符串类型,XML会直接保留设置的格式,不会自动补全小数位。

内容的提问来源于stack exchange,提问作者k.troy2012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:00:02