如果我理解,你想打印一个浮点数吗?
问题是,你不能打印浮点数。
您只能打印浮点数的字符串表示形式。所以,简而言之,你不能打印一个浮点数,这就是你的答案。
如果您接受需要打印浮点数的字符串表示形式,并且您的问题是如何为浮点数的字符串表示形式指定首选格式,那么根据 cmets 判断,您的问题非常不清楚。
如果您想以指数表示法打印浮点数的字符串表示,那么格式规范语言允许这样做:
{:g} 或 {:G},取决于您是否希望输出中的 E 大写)。这绕过了 e 和 E 类型的默认精度,这会导致在指数符号之前的部分出现不需要的尾随 0。
假设您的值为my_float,"{:G}".format(my_float) 将按照 Python 解释器的打印方式打印输出。您可能只打印没有任何格式的数字并获得相同的确切结果。
如果您的目标是以非指数形式以当前精度打印浮点数的字符串表示,用户poke 描述了一种通过将浮点数转换为 Decimal 对象来实现此目的的好方法。
如果由于某种原因您不想这样做,您可以执行this answer 中提到的类似操作。但是,您应该将“max_digits”设置为sys.float_info.max_10_exp,而不是答案中使用的 14。这需要您在代码之前的某个时间点 import sys。
一个完整的例子是:
import math
import sys
def precision_and_scale(x):
max_digits = sys.float_info.max_10_exp
int_part = int(abs(x))
magnitude = 1 if int_part == 0 else int(math.log10(int_part)) + 1
if magnitude >= max_digits:
return (magnitude, 0)
frac_part = abs(x) - int_part
multiplier = 10 ** (max_digits - magnitude)
frac_digits = multiplier + int(multiplier * frac_part + 0.5)
while frac_digits % 10 == 0:
frac_digits /= 10
scale = int(math.log10(frac_digits))
return (magnitude + scale, scale)
f = 0.0000002345E^-60
p, s = precision_and_scale(f)
print "{:.{p}f}".format(f, p=p)
但总体而言,我认为涉及强制转换为 Decimal 的方法可能更好。