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

Flask+PostgreSQL中Linux下money类型千分位设为 的方法

问题

现有一个基于Flask与PostgreSQL的程序,需将部分数字数据转换为money类型。当前存在以下差异问题:

  • Windows系统中,money类型数据的千分位分隔符为 (可通过浏览器控制台确认)
  • Linux系统运行时,千分位分隔符变为普通空格

要求不使用to_char函数的前提下,实现Linux系统中也用 作为千分位分隔符。

补充说明:Windows下数字显示格式为20,000,Linux下为2,000,000。

现有相关代码片段:

  • 数据库查询语句:
    COALESCE(t1.account_money, 0)::money AS account_money
    
  • HTML中Jinja2渲染代码:
    <td class="th_main_sum_i">{{ application.account_money }}</td>
    

附Windows与Linux的locale设置截图、PostgreSQL在Linux下的locale设置截图。


解决方案

方法1:自定义PostgreSQL的LC_MONETARY locale

PostgreSQL的money类型格式化逻辑完全依赖系统的LC_MONETARY locale配置。通过创建自定义locale,将千分位分隔符指定为非断空格(Unicode U+00A0,对应HTML的&nbsp;),即可让数据库直接输出符合要求的格式。

操作步骤:

  1. 导出现有目标locale的配置文件(以en_US.UTF-8为例):
    localedef --dump-locale en_US.UTF-8 > en_US.UTF-8.src
    
  2. 编辑导出的en_US.UTF-8.src文件,找到mon_thousands_sep字段,将其值修改为"\u00A0"
  3. 生成自定义locale:
    localedef -f UTF-8 -i en_US en_US.UTF-8-NBSP < en_US.UTF-8.src
    
  4. 修改PostgreSQL配置文件(postgresql.conf):
    lc_monetary = 'en_US.UTF-8-NBSP'
    
  5. 重启PostgreSQL服务使配置生效。

方法2:在Jinja2渲染层替换分隔符

如果不想修改数据库配置,可直接在模板渲染阶段将money字符串中的普通空格替换为&nbsp;。修改后的Jinja2代码如下:

<td class="th_main_sum_i">{{ application.account_money.replace(' ', '&nbsp;') }}</td>

该方法无需调整数据库,仅在前端处理,实现成本低且兼容性强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:44:55