如何将浮点数格式化为整数?
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
>>>
我正在寻找一个通用的格式公式,我不会失去精度,但另一方面,如果没有必要,我没有小数点
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
>>>