2011-06-02 31 views
0

我一直在寻找一种方法在python中获得一个十进制数的逗号右侧只有4位数字,但我找不到。承担了这个帖子一看,--->Rounding decimals with new Python format function ,但功能写有...获取数字位数

>>> n = 4 
    >>> p = math.pi 
    >>> '{0:.{1}f}'.format(p, n) 
    '3.1416' 

...好像不是在我的情况下工作。

我导入模块“数学”和“小数”,但也许我错过了一些其他导入,但我不知道他们哪些导入。

谢谢大家,并很抱歉,如果这个问题已经发布。

PEIXE

+0

'似乎不是我的工作case.'什么是不工作?你得到什么错误?请提供更多细节。 – mouad 2011-06-02 08:43:10

+0

这可能是因为你使用的是Python 2而不是Python 3. – Robin 2011-06-02 08:49:22

+0

这是当我将函数传递给我的数据时得到的错误...: AttributeError:'str'对象没有属性'格式' 我只是想在列表中总结一些数字,我需要他们有相同数量的小数。 这就是所有......;) – peixe 2011-06-02 09:27:50

回答

7
"%.3f" % math.pi 

我知道使用旧的语法的,但我个人更喜欢它。

+0

@Jakob Bower:我更喜欢它,但是在OP的方法中,在舍入精度方面存在细微的差异(或者错误? '“%.4f”%0.11115'将产生0.1111',然而,“%.3f”%0.1115' - >'0.112' ...怪异的 – 2011-06-02 08:49:57

+0

我认为那只是浮点数,我不知道是否.format它有不同的表现,但仍然浮点数学是不正确的。 – 2011-06-02 08:55:23

+0

@Jakob Bower:嗯,我很天真地期望str.format的行为会有所不同:)顺便说一句,''%.xf“%round(float,x)'对于这样的'边缘'情况好吗? – 2011-06-02 09:21:48

1

如果你只想要一个浮动的其余部分,你可以转换成字符串和分裂的'.'

>>> str(math.pi).split('.')[1][:4] 
<<< '1415' 

decimal.Decimal

>>> Decimal(math.pi).as_tuple()[1][1:5] 
<<< (1, 4, 1, 5) 
2

你有什么是好的(四舍五入5最多6)

如果你想要截断而不是四舍五入你可以去:

from math import pi as p 
print p 
print int(p*10**4)/10.0**4 

p=str(p).split(".") 
p[1]=p[1][:4] 
print ".".join(p) 

输出:

3.14159265359

3.1415

3.1415

+0

嘿,这个解决方案也做了这个工作!这很好,很简单! – peixe 2011-06-02 09:32:12

+0

谢谢,我不确定你是否想要四舍五入。如果你喜欢,可以投票。 – 2011-06-02 09:42:23

+0

我想upvote,但我需要15声望,它说...;) – peixe 2011-06-02 10:11:16