如何将浮点数格式化为整数?

时间:2015-08-14 18:49:47

标签: python formatting string-formatting

我正在寻找一个常见的格式化公式,我不会失去精度,但另一方面,如果没有必要,我没有小数点

4.00 => "4"
1.23 => "1.23"

我试过这个

print "%.2f" % numvar

但是对于4.00我得到4.00

这种格式应该作为参数传递给其他函数(参见 float_format http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html),所以我不需要一些if else解决方案。

2 个答案:

答案 0 :(得分:1)

使用%g格式代码。

>>> print '%g' % 3
3
>>> print '%g' % 3.1
3.1
>>> print '%g' % 3.14
3.14
>>> print '%g' % 3.14159
3.14159
>>> print '%g' % 3.1415926
3.14159
>>> print '%.6g' % 3.1415926
3.14159
>>> print '%.8g' % 3.1415926
3.1415926
>>> print '%.10g' % 3.1415926
3.1415926
>>> 

答案 1 :(得分:0)

您可以使用正则表达式:

import re

def form(f, prec, spec):
    return re.sub("\.0+$", "", "{:.{prec}{spec}}".format(f, prec=prec, spec=spec))

输出:

In [2]: form(1.23, 2, "f")
Out[2]: '1.23'  
In [3]: form(4.00, 2, "f")
Out[3]: '4'    
In [4]: form(1.2302, 4, "f")
Out[4]: '1.2302'    
In [5]: form(1.0000, 4, "f")
Out[5]: '1'

或者如果你确定1.10成为1.1你可以只是rstrip:

print("{:.2f}".format(f).rstrip(".0"))