我正在使用Stripe通过Django Web应用程序处理付款。
数据库中的价格以十进制格式存储,例如100.00
条带将其作为$ 1,并忽略小数点右边的所有内容。
将此数字传递给Stripe时,我需要删除小数点。
我可以在Django模板中执行此操作吗?
答案 0 :(得分:1)
使用FLoat Format Filter,您可以这样做:
{{ value.context|floatformat }}
编辑
传递0(零)作为参数将浮点数舍入到最接近的整数特别有用。
value Template Output
34.23234 {{ value|floatformat:"0" }} 34
34.00000 {{ value|floatformat:"0" }} 34
39.56000 {{ value|floatformat:"0" }} 40
答案 1 :(得分:1)
我认为您可以在模板中使用custom filter,如下所示:
from django import template
register = template.Library()
@register.filter
def remove_decimal_point(value):
return value.replace(".","")
并在这样的模板中使用它:
{% load remove_decimal_point %}
....
{{ val|remove_decimal_point }}
答案 2 :(得分:0)
这取决于您的实现。这样的事情在所有情况下都应该起作用:
total_price = 123.4567
stripe_price = str(int(round(total_price, 2) * 100))
这将产生:
'12346'
第一个四舍五入到两个小数,然后乘以100,然后转换为整数,然后转换为字符串。根据您的Stripe集成,可以跳过对整数和字符串的强制转换。
将强制转换为int会产生如下结果:
>> str(round(total_price, 2) * 100)
>> '12346.00'
由于Stripe将小数点后的所有内容都剥离,因此它仍然可以工作,但也许您不希望这些尾随零。
如果要在模板中转换数字,则可以使用custom template filter,就像其他人已经指出的那样。
@register.filter(name='stripeconversion')
def stripe_value(total_price):
return str(int(round(total_price, 2) * 100))
并在模板中使用它:
{{ total_price|stripeconversion }}