【发布时间】:2020-11-17 03:30:28
【问题描述】:
我对 Web2py 有点陌生。我有一个运行良好的系统,但我想对可视化进行改进。有几个字段使用数字(在它们各自的define_table 方法中定义为double)来表示货币,但我希望它们也用千位分隔符显示,例如183,403,293.34。我检查了一些文档,但我找不到处理这种定制形式的直接方法,尽管我可能遗漏了一些东西。
对此有什么建议吗?干杯!
【问题讨论】:
标签: python-2.x web2py
我对 Web2py 有点陌生。我有一个运行良好的系统,但我想对可视化进行改进。有几个字段使用数字(在它们各自的define_table 方法中定义为double)来表示货币,但我希望它们也用千位分隔符显示,例如183,403,293.34。我检查了一些文档,但我找不到处理这种定制形式的直接方法,尽管我可能遗漏了一些东西。
对此有什么建议吗?干杯!
【问题讨论】:
标签: python-2.x web2py
首先,如果表示货币,您应该使用decimal 字段类型而不是double(由于在内部使用浮点表示,某些使用double 值的计算可能会产生不正确的结果)。但是,如果使用 SQLite,decimal 和 double 之间没有区别,因此在这种情况下,您可能希望将所有值乘以 100,而不是存储整数。
无论如何,要在 Python 中使用千位分隔符显示给定数值,您可以这样做:
'{:,}'.format(myvalue)
更多详情,请参阅https://stackoverflow.com/a/10742904/440323 和https://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 '')
【讨论】:
double 更改为float。无论如何,我会试试这个!
double 更改为decimal,而不是float(没有float 字段类型——相反,double 在内部实现为浮点)。
你可以使用 locale 模块的 Python 函数:
{{= locale.format ('%. 2f', your_value, grouping = True)}}
【讨论】: