Django 浮点格式在浮点数之后只获取数字
Posted
技术标签:
【中文标题】Django 浮点格式在浮点数之后只获取数字【英文标题】:Django float format get only digits after floating point 【发布时间】:2015-02-08 19:19:10 【问题描述】:是否有一个 django 模板过滤器可以只获取浮点数之后的数字?
例如:
2.34 --> 34
2.00 --> 00
1.10 --> 10
我在https://docs.djangoproject.com/en/dev/ref/templates/builtins/没有找到答案。
【问题讨论】:
你总是可以自己写... 【参考方案1】:最好编写自己的过滤器,但如果您不想这样做,我可以为您提供另一种并非最佳的“懒惰”解决方案:
value|stringformat:"f"|slice:"-6:-4"
【讨论】:
【参考方案2】:由于这个问题涉及的其他问题太多,我也想再添加一个答案。
对于我来说,@alecxe 提出的答案是矫枉过正。可读性很差,你的项目开始依赖额外的库。但你只需要在页面上显示两位数。
创建自己的模板的解决方案似乎更好。它看起来更简单,使用更少的操作,没有依赖关系。
@register.filter
def floatfract(value):
sf = "%.2f" % value
return sf.split('.')[1]
并在您的模板中使用它:
object.price|floatfract
就是这样。我正在使用它。
为了使答案完整,我可以在您希望具有灵活分数长度的情况下对其进行扩展。例如,有 2 到 5 个数字。 看起来更糟:
@register.filter
def floatfract(value, length=2):
sf = "%.lengthf".format(length=length) % value
return sf.split('.')[1]
用法:
object.price|floatfract:5
【讨论】:
【参考方案3】:除了creating your own custom filter,你还可以使用django-mathfilters
package解决:
value|mod:1|mul:100|floatformat:"0"
地点:
mod
是 mathfilters
提供的“模”过滤器
mul
是mathfilters
提供的“乘法”过滤器
floatformat
是一个内置的 django 过滤器
演示:
>>> from django.template import Template, Context
>>> c = Context('value': 2.34)
>>> t = Template('% load mathfilters % value|mod:1|mul:100|floatformat:"0" ')
>>> t.render(c)
u'34'
【讨论】:
谢谢!但是,有什么技巧可以得到前导零吗?使用当前过滤器:2.04 --> 4。我想要 2.04 --> 04。我尝试添加 |stringformat:"02d" 但没有成功。以上是关于Django 浮点格式在浮点数之后只获取数字的主要内容,如果未能解决你的问题,请参考以下文章