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" 

地点:

modmathfilters 提供的“模”过滤器 mulmathfilters 提供的“乘法”过滤器 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 浮点格式在浮点数之后只获取数字的主要内容,如果未能解决你的问题,请参考以下文章

在汇编中将无符号字符转换为浮点数(为浮点向量计算做准备)

Objective C - 通过选择器传递浮点数

将浮点数转换为字符串而不会丢失精度

JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数

如何在浮点数后设置7位精度[重复]

js中如何判断两个浮点数是不是相等