在我的數據庫中,我有一個整數字段存儲價格信息,如「10399」,「84700」。 顯示時,它們應該是「$ 103.99」和「$ 847.00」。使用Django模板過濾器進行數學運算嗎?
我需要int * 0.01來顯示。
我想知道是否有使用Django模板過濾器的方法嗎?像:
{{ item.price|int_to_float_and_times_0.01 }}
另一個問題,其實我選擇了整數,因爲我認爲它會比在數據庫中使用float更高效。真的嗎?
在我的數據庫中,我有一個整數字段存儲價格信息,如「10399」,「84700」。 顯示時,它們應該是「$ 103.99」和「$ 847.00」。使用Django模板過濾器進行數學運算嗎?
我需要int * 0.01來顯示。
我想知道是否有使用Django模板過濾器的方法嗎?像:
{{ item.price|int_to_float_and_times_0.01 }}
另一個問題,其實我選擇了整數,因爲我認爲它會比在數據庫中使用float更高效。真的嗎?
你可以使自己的模板過濾器,其本質上是做你需要的只是將輸入100。例如什麼:
在程序my_app/templatetags/currency_helper.py:
from django import template
register = template.Library()
@register.filter
def to_currency(value):
return float(value)/100.0
然後在模板:
{% load currency_helper %}
etc...
{{item.price|to_currency}}
另外,如果我是你,我會在你的數據庫中存儲的貨幣值小數場,以避免這樣做或處理的頭痛舍入誤差。通過如果你Python版本支持它去掉括號
context['prices'] = [float(item) * 0.01 for item in Model.objects.all()]
(你也可以把它生成:
您可以將它們傳遞給模板背景下,例如與列表理解之前只需修改整數,它會讓你的代碼使用更少的內存。)
使用int
而不是float
似乎不太可能使您的網站顯着更快。 如果你想要一個安全的類型,價格,使用decimal
:http://docs.python.org/library/decimal.html
我不知道你是否能返回浮動,但你可以格式化數字作爲一個字符串:
from django import template
register = template.Library()
def int_to_float_and_times(value):
value = float(value) * .01
return u'${0:.2f}'.format(value)
register.filter('int_to_float_and_times', int_to_float_and_times)
你如何定義高效?通常貨幣價值是以特殊格式存儲的,這些格式試圖進行精確的計算。
編輯:0.01是不是在一個函數名允許
可以使用widthratio
templatetag除法:
${% widthratio item.price 100 1 %}
(結果是(A/B)* C,如果A,B,C對於widthratio
的3個參數)
將導致:$103.99
(10399對)
'widthratio'返回一個整數'{%widthratio 10399 100 1%}'給出'104',而不是'103.99' – guival 2016-05-23 16:21:43
整數幾乎總是認爲代表錢儲存PU的最佳方式rposes。 – cwallenpoole 2011-06-11 23:26:02