SQLite中如何让数字始终保留两位小数?
解决SQLite中按欧洲格式格式化数字(千分位点+小数逗号,固定两位小数)
你的问题核心是SQLite默认数字格式化采用美式规则(小数点用点、千分位用逗号),但你需要的是欧洲格式(千分位用点、小数点用逗号)且小数部分固定两位补0。直接使用printf('%.2f', number)只会输出无千分位的美式格式,因此达不到预期效果。
解决方案SQL语句
SELECT replace(printf('%,d', CAST(number AS INTEGER)), ',', '.') || ',' || printf('%.2d', ROUND((number - CAST(number AS INTEGER)) * 100)) AS formatted_number FROM numbers;
语句说明
整数部分处理:
CAST(number AS INTEGER)提取数字的整数部分printf('%,d', ...)为整数添加美式千分位逗号(如97516 →'97,516')replace(..., ',', '.')将美式千分位逗号替换为点,转换为欧洲格式的整数部分('97,516'→'97.516')
小数部分处理:
number - CAST(number AS INTEGER)提取小数部分*100将小数转换为整数(如0.6 → 60,0.05 → 5)ROUND(...)避免浮点精度误差(如0.199999999999修正为20)printf('%.2d', ...)确保小数部分为两位,不足时自动补0(如5 →'05',60 →'60')
拼接格式:用
||连接整数部分、逗号、小数部分,得到最终的欧洲格式字符串。
测试结果匹配
执行上述语句后,你标注的需要修正的条目都会得到预期格式:
97.331,6→97.331,6097.163,1→97.163,1097,3→97,30968,7→968,70
内容的提问来源于stack exchange,提问作者sysOut
相关产品推荐
相关产品推荐

