Django模板:输出所有小数位的浮点数
Posted
技术标签:
【中文标题】Django模板:输出所有小数位的浮点数【英文标题】:Django templates: output float with all decimal places 【发布时间】:2017-04-18 10:37:26 【问题描述】:我如何在django模板中输出这个数字(小数位数是可变的,我事先不知道):
x = 0.000015
1)
x
输出是:
1,5e-05
2)
x|stringformat:"f"
输出是:
0.000015
没有本地化,应该有逗号!我需要将输出本地化并保留所有小数位。
我不敢相信 django 无法使用内置工具处理如此简单的任务。
更新: 我已经有正确的设置:
LANGUAGE_CODE = 'ru'
USE_L10N = True
默认 Django 输出对于大多数浮点数都可以正常工作,它只会在这个小数上失败。它以指数表示法输出,但我需要输出为所有小数位的浮点数(小数位数是可变的)。
【问题讨论】:
【参考方案1】:如果你知道数字的长度,你可以尝试使用 floatformat 过滤器:
x|floatformat:6
其中 6 是小数部分的长度。
【讨论】:
我更新了问题 - 小数位数是可变的,我事先不知道。【参考方案2】:这是由于区域设置错误造成的。 Django 本地化工作使用当前的语言环境设置(Format Localization):
当使用 Django 的格式化系统时,模板上的日期和数字将使用为当前语言环境指定的格式显示。
要修复它,您应该设置正确的语言环境,我假设它是 pt_BR(由于逗号),但您可以使用任何正确的语言环境。
尝试将其添加到您的设置中:
LANGUAGE_CODE = 'pt-BR'
USE_L10N = True
然后重新运行您的代码
【讨论】:
我已经有了这些设置(在我的例子中是 LANGUAGE_CODE='ru')。它适用于所有其他浮点数,但仅适用于这个小的浮点数 - 使用我不需要的指数符号输出。 尝试设置为“ru-RU”,这是俄语的有效代码,并通过在命令行上运行import locale; locale.setlocale(locale.LC_ALL, "ru_RU.UTF-8")
来验证它是否已安装。
我什至试过 LANGUAGE_CODE = 'pt-BR' 仍然输出为 '1,5e-05'
尝试在模板顶部添加% load l10n %
,然后使用x|stringformat:"f"|localize
另外,如果你知道 ir 有多少位小数,你也可以试试: x|floatformat:6
【参考方案3】:
我找到了另一种解决方案,效果很好。
首先将 FloatField 转换为 DecimalField:
some_value = models.DecimalField(max_digits=20, decimal_places=15)
然后在模板中输出如下:
x.some_value.normalize
结果它输出 0.000015 为“0.000015”
【讨论】:
以上是关于Django模板:输出所有小数位的浮点数的主要内容,如果未能解决你的问题,请参考以下文章