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模板:输出所有小数位的浮点数的主要内容,如果未能解决你的问题,请参考以下文章

输出保留12位小数的浮点数

c++中如何输出保留三位小数的浮点数

1.1编程基础之输入输出——05:输出保留12位小数的浮点数

奥赛一本通1024:保留3位小数的浮点数

奥赛一本通1025:保留12位小数的浮点数

1.1编程基础之输入输出——04:输出保留3位小数的浮点数