当前位置:  开发笔记 > 编程语言 > 正文

如何在python中将有理数和十进制数字串转换为浮点数?

如何解决《如何在python中将有理数和十进制数字串转换为浮点数?》经验,为你挑选了3个好方法。

如何将可以表示十进制或有理数的字符串转换为浮点数

>>> ["0.1234", "1/2"]
['0.1234', '1/2']

我想要[0.1234,0.5].

eval是我的想法,但没有运气:

>>> eval("1/2")
0

Ryan.. 17

如果转换失败,我会解析字符串:

>>> def convert(s):
    try:
        return float(s)
    except ValueError:
        num, denom = s.split('/')
        return float(num) / float(denom)
...

>>> convert("0.1234")
0.1234

>>> convert("1/2")
0.5

通常使用eval是一个坏主意,因为它存在安全风险.特别是如果被评估的字符串来自系统外部.



1> Ryan..:

如果转换失败,我会解析字符串:

>>> def convert(s):
    try:
        return float(s)
    except ValueError:
        num, denom = s.split('/')
        return float(num) / float(denom)
...

>>> convert("0.1234")
0.1234

>>> convert("1/2")
0.5

通常使用eval是一个坏主意,因为它存在安全风险.特别是如果被评估的字符串来自系统外部.



2> John Fouhy..:

正如其他人所指出的那样,使用eval可能存在安全风险,当然也是一种不良习惯.(如果你不认为这是有风险的exec,想象的eval荷兰国际集团这样的:__import__('os').system('rm -rf /'))

但是,如果你有python 2.6或更高版本,你可以使用ast.literal_eval,为其提供的字符串:

可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None.

因此它应该是相当安全的:-)



3> 小智..:

另一个选项(也仅适用于2.6及以上)是fractions模块.

>>> from fractions import Fraction
>>> Fraction("0.1234")
Fraction(617, 5000)
>>> Fraction("1/2")
Fraction(1, 2)
>>> float(Fraction("0.1234"))
0.1234
>>> float(Fraction("1/2"))
0.5

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有