1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python浮点数转科学计数_python – 将float转换为字符串没有科学记数法和假精度...

python浮点数转科学计数_python – 将float转换为字符串没有科学记数法和假精度...

时间:2018-10-17 11:56:38

相关推荐

python浮点数转科学计数_python – 将float转换为字符串没有科学记数法和假精度...

不幸的是,似乎甚至没有浮动.__格式的新式格式支持这个。 float的默认格式与repr相同;和f标志默认有6个小数位数:

>>> format(0.0000000005, 'f')

'0.000000'

然而,有一个hack获得所需的结果 – 不是最快的,但相对简单:

>首先使用str()或repr()将float转换为字符串,

>然后从该字符串创建一个新的Decimal实例。

> Decimal .__ format__支持f标志,它给出所需的结果,并且与float不同,它打印实际精度而不是默认精度。

因此我们可以创建一个简单的效用函数float_to_str:

import decimal

# create a new context for this task

ctx = decimal.Context()

# 20 digits should be enough for everyone :D

ctx.prec = 20

def float_to_str(f):

"""

Convert the given float to a string,

without resorting to scientific notation

"""

d1 = ctx.create_decimal(repr(f))

return format(d1, 'f')

必须小心不要使用全局十进制上下文,因此为此函数构造一个新的上下文。这是最快的方式;另一种方法是使用decimal.local_context,但它会更慢,为每个转换创建一个新的线程本地上下文和上下文管理器。

>>> float_to_str(0.1)

'0.1'

>>> float_to_str(0.00000005)

'0.00000005'

>>> float_to_str(420000000000000000.0)

'420000000000000000'

>>> float_to_str(0.000000000123123123123123123123)

'0.00000000012312312312312313'

最后一个结果在最后一位数字四舍五入

正如@Karin所指出的,float_to_str(420000000000000000.0)并不与预期的格式严格匹配;它返回420000000000000000没有尾.0。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。