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

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;

语句说明

  1. 整数部分处理:

    • CAST(number AS INTEGER) 提取数字的整数部分
    • printf('%,d', ...) 为整数添加美式千分位逗号(如97516 → '97,516')
    • replace(..., ',', '.') 将美式千分位逗号替换为点,转换为欧洲格式的整数部分('97,516' → '97.516')
  2. 小数部分处理:

    • number - CAST(number AS INTEGER) 提取小数部分
    • *100 将小数转换为整数(如0.6 → 60,0.05 → 5)
    • ROUND(...) 避免浮点精度误差(如0.199999999999修正为20)
    • printf('%.2d', ...) 确保小数部分为两位,不足时自动补0(如5 → '05',60 → '60')
  3. 拼接格式:用||连接整数部分、逗号、小数部分,得到最终的欧洲格式字符串。

测试结果匹配

执行上述语句后,你标注的需要修正的条目都会得到预期格式:

  • 97.331,6 → 97.331,60
  • 97.163,1 → 97.163,10
  • 97,3 → 97,30
  • 968,7 → 968,70

内容的提问来源于stack exchange,提问作者sysOut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:25:51