在Django完成功能

时间:2013-01-28 10:57:22

标签: python django django-views rounding numerical-methods

我想在像-------

这样的视图中为我的数值计算舍入一些值

5.5到5 或549 t0 500和599 - 600(最近的一个)

所以我想在django中使用舍入OR floor函数,就像我们在其他语言中使用的那样。在django中是否有与此相关的函数,请建议我一些函数以及我必须导入以使用这些函数的库。

感谢。

4 个答案:

答案 0 :(得分:2)

如果您在模板或其他地方尝试执行此操作,则不会说。

在模板中,您可以使用floatformat过滤器。

否则,它只是Python,所以你可以使用普通的Python舍入函数。

答案 1 :(得分:2)

使用浮动广告时,您可以使用roundmath.ceilmath.floor

对于decimal.Decimal,您可以使用quantize方法来指定舍入:

value = decimal.Decimal('0.5')
value.quantize(decimal.Decimal('1'), decimal.ROUND_UP)
value.quantize(decimal.Decimal('1'), decimal.ROUND_DOWN)
value.quantize(decimal.Decimal('1'), decimal.ROUND_HALF_UP)
...

有关舍入方法的列表,请参阅decimal.Context

请注意,默认情况下python使用ROUND_HALF_EVEN,这对于统计数据非常有用,但对于金融数学却非常尴尬。将金额四舍五入到百分之一的典型方法是以下代码:

amount = decimal.Decimal('0.15234')
CENTI = decimal.Decimal('0.01')
value.quantize(CENTI, decimal.ROUND_HALF_UP)

答案 2 :(得分:0)

在视图中使用decimal

>>> import decimal
>>> numbers = ['5.5','499','1','0.5']
>>> for i in numbers:
...   the_number = int(decimal.Decimal(i))
...   if the_number / 10:
...      the_number = the_number + 10 - (the_number % 10)
...   print the_number
...
5
500
1
0

如果要格式化浮点数,请按照Daniel的建议使用floatformat,但不会为您进行舍入。

答案 3 :(得分:0)

如果您在ORM中执行此操作,则可以使用Func()表达式,请参阅this answer