【发布时间】:2011-11-22 20:57:21
【问题描述】:
我有一个相当广泛的 Django 站点,它处理需要以 2 位小数显示的货币金额,但由于对这些金额执行了数学运算,因此在幕后使用了 4 位小数。一些页面通过 AJAX 调用(作为 JSON)获取这些数量,而其他页面通过标准视图 => 模板变量传递来获取它们。我的模型使用models.DecimalField(max_digits=10, decimal_places=4, default=Decimal('0'))
现在网站已经足够大了,我需要找出一种一致的方法来处理这种小数四舍五入,但无论我采用哪种方法,它都显得很尴尬。以下是我能想到的两种方式,但似乎都不太理想。
前端:视图保留小数点不变,保留 4 位。模板使用
floatformat:2过滤器,JS 函数使用.toFixed(2)来转换传入的JSON 数据。问题:模板代码和JS代码中很多地方都需要处理舍入。后端:视图将所有小数四舍五入到 2 位,并将它们作为字符串传递给模板。同样,对传入 AJAX 调用的响应 serialize all decimals to 2 places。问题:视图现在处理格式而不是模板,特殊情况不能在模板中以不同的格式设置。
是否有一种“正确的 Djangonic”方式来处理小数舍入?
【问题讨论】:
-
我认为您的问题没有明确的答案,但我尽量让模板保持低调,所以我会在服务器端进行格式化。