从传递给Django模板的数字中删除小数点?

时间:2019-01-02 09:32:52

标签: django django-templates stripe-payments

我正在使用Stripe通过Django Web应用程序处理付款。

数据库中的价格以十进制格式存储,例如100.00

条带将其作为$ 1,并忽略小数点右边的所有内容。

将此数字传递给Stripe时,我需要删除小数点。

我可以在Django模板中执行此操作吗?

3 个答案:

答案 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 }}