例如。
s='[-97.173125220360362, -97.173125220360362]'
v=eval(s)
实际上v = [ - 97.17312522036036,-97.17312522036036],丢失了最后的2.如何用字符串保持相同的值
答案 0 :(得分:4)
使用decimal
模块:
>>> import decimal
>>> decimal.Decimal('-97.173125220360362')
Decimal('-97.173125220360362')
对于包含列表案例的字符串,请使用str.split
,str.strip
和列表理解:
>>> s = '[-97.173125220360362, -97.173125220360362]'
>>> [decimal.Decimal(x) for x in s.strip('[]').split(',')]
[Decimal('-97.173125220360362'), Decimal('-97.173125220360362')]
来自docs:
>> import sys
>>> sys.float_info.dig
15
>>> s = '3.14159265358979' # decimal string with 15 significant digits
>>> format(float(s), '.15g') # convert to float and back -> same value
'3.14159265358979'
但对于有效数字超过sys.float_info.dig
的字符串,情况并非总是如此:
>>>
>>> s = '9876543211234567' # 16 significant digits is too many!
>>> format(float(s), '.16g') # conversion changes value
'9876543211234568'
因此,如果要保持包含超过sys.float_info.dig
位数的浮点数的精度,请使用decimal
模块。
答案 1 :(得分:1)
import ast
s = '[-97.173125220360362, -97.173125220360362]'
print ast.literal_eval(s)
正如文档所述,使用ast.literal_eval
比eval
更安全。
这将为您提供浮动列表。
答案 2 :(得分:1)
这更像是一个显示问题,要获取列表,请改用literal_eval:
from ast import literal_eval
s= '[-97.173125220360362, -97.173125220360362]'
items = literal_eval(s)
# [-97.17312522036036, -97.17312522036036]
然后显示,格式化:
as_strings = [format(el, '.17g') for el in items]
# ['-97.173125220360362', '-97.173125220360362']