有一个浮点数 def DogHome(request.GET):
DogList = dog.objects.all()
return render(request, 'DogHome.html', {'foo':DogList})
。如何将其格式化为浮点后限制3位数?我尝试了num = 22.0098
但是返回sprintf('%.3f',num)
,我需要22.010
答案 0 :(得分:7)
我可以想到使用bigdecimal。不确定它是否过度杀伤:
require 'bigdecimal'
BigDecimal::new("22.0098").truncate(3).to_f
#=> 22.009
答案 1 :(得分:2)
不幸的是,与Float#round
不同,Float#floor
不接受一定数量的数字。以下代码实现了所需的行为。
def floor_float input, digits = 3
input.divmod(10 ** -digits).first / (10 ** digits).to_f
end
这可以用作猴子补丁:
class Float
def floor_ext digits = 3
self.divmod(10 ** -digits).first / (10 ** digits).to_f
end
end
22.0098.floor_ext
#⇒ 22.009
可能是@Stefan建议的更简洁的变体:
class Float
def floor_ext digits = 3
div(10 ** -digits).fdiv(10 ** digits)
end
end
22.0098.floor_ext
#⇒ 22.009
或者,可以明确地处理字符串:
i, f = 22.0098.to_s.split('.')
#⇒ [ "22", "0098" ]
[i, f[0..2]].join('.')
#⇒ "22.009"
答案 2 :(得分:0)
如果您知道整数部分中有多少位数,您可以将其格式化为字符串:
sprintf("%.6s", num)
# => "22.009"
通常,您可以根据6
的大小调整num
。