如何将浮点数格式化为小数点后三位有效数字?如果浮点数没有小数位,则数字保持不变。
'{0:.3}'.format(0.000325658)
'0.000326'
这是不正确的:
'{0:.3}'.format(325256.023)
'3.25e+05'
和应该是
325256.023
值325256.0
应输出为325256.0
如果可能的话,我希望用一个''.format()
来完成。
测试用例:
0.000325658 - > 0.000326
325256.023 - > 325256.023
325256.0 - > 325256.0 or 325256.000
编辑添加新的测试用例:
'{0:.3f}'.format(325256.000023)
'325256.000'
应该
325256.000023
如果您乐意包含numpy,那么您可以使用numpy。Format_float_positional函数,带有一个额外的步骤:
import numpy as np
def to_significant_decimals(n, amount):
integer = int(n)
n -= integer
return integer + float(np.format_float_positional(n, precision=amount, unique=False, fractional=False))
tests = [ 0.000325658, 325256.023, 325256.0, 325256.000023, 0, 7, 1000000, 1000.3, 1000.0001, 1234.4321 ]
for test in tests:
print(' ' + str(test) + ' = ' + str(to_significant_decimals(test, 3)))
print(str(-test) + ' = ' + str(to_significant_decimals(-test, 3)))
numpy函数允许您选择有效数字的数量,但这包括整数部分。我已经解决了这个问题,去掉整数部分,修改格式,然后再加上整数。可能有一个更优雅的解决方案,但这给出了您想要的结果。
输出:
0.000325658 = 0.000326
-0.000325658 = -0.000326
325256.023 = 325256.023
-325256.023 = -325256.023
325256.0 = 325256.0
-325256.0 = -325256.0
325256.000023 = 325256.000023
-325256.000023 = -325256.000023
0 = 0.0
0 = 0.0
7 = 7.0
-7 = -7.0
1000000 = 1000000.0
-1000000 = -1000000.0
1000.3 = 1000.3
-1000.3 = -1000.3
1000.0001 = 1000.0001
-1000.0001 = -1000.0001
1234.4321 = 1234.432
-1234.4321 = -1234.432
就像这样
'{0:.3f}'.format(325256.023)