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

how to format float number as integer?

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

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 解决方案。

您可以使用正则表达式:

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"))

使用 %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
>>>