【问题标题】:Web2py Number Formatting for ThousandsWeb2py 数以千计的数字格式
【发布时间】:2020-11-17 03:30:28
【问题描述】:

我对 Web2py 有点陌生。我有一个运行良好的系统,但我想对可视化进行改进。有几个字段使用数字(在它们各自的define_table 方法中定义为double)来表示货币,但我希望它们也用千位分隔符显示,例如183,403,293.34。我检查了一些文档,但我找不到处理这种定制形式的直接方法,尽管我可能遗漏了一些东西。

对此有什么建议吗?干杯!

【问题讨论】:

    标签: python-2.x web2py


    【解决方案1】:

    首先,如果表示货币,您应该使用decimal 字段类型而不是double(由于在内部使用浮点表示,某些使用double 值的计算可能会产生不正确的结果)。但是,如果使用 SQLite,decimaldouble 之间没有区别,因此在这种情况下,您可能希望将所有值乘以 100,而不是存储整数。

    无论如何,要在 Python 中使用千位分隔符显示给定数值,您可以这样做:

    '{:,}'.format(myvalue)
    

    更多详情,请参阅https://stackoverflow.com/a/10742904/440323https://stackoverflow.com/a/21208495/440323

    如果您通过使用字段的represent 函数(例如,网格或.render() 方法)的web2py 功能使用值,则可以定义自定义represent 函数,例如:

    Field('amount', 'decimal(12, 2)',
          represent=lambda v, r: '{:,}'.format(v) if v is not None else '')
    

    【讨论】:

    • 我明白了!系统使用 PostgreSQL。我负责维护和改进这个系统,因此我不确定是否应该将double 更改为float。无论如何,我会试试这个!
    • 好吧,它就像一个魅力!我将不得不探索这一点,以便在其他领域进一步定制。但是,我不确定您评论的数据类型问题。
    • 请注意,您会将double 更改为decimal,而不是float(没有float 字段类型——相反,double 在内部实现为浮点)。
    【解决方案2】:

    你可以使用 locale 模块的 Python 函数:

    {{= locale.format ('%. 2f', your_value, grouping = True)}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多