Python2.6和Python2.7中的浮点值行为
我必须将字符串转换为浮点元组。 在Python2.7中,它给出了正确的转换,但在Python中情况不同 我希望在Python2.6中有相同的行为 有谁能帮我解释一下为什么在Python2.6中不一样,以及在Python2.6中如何做 Python 2.6Python2.6和Python2.7中的浮点值行为,python,python-2.7,floating-point,python-2.6,Python,Python 2.7,Floating Point,Python 2.6,我必须将字符串转换为浮点元组。 在Python2.7中,它给出了正确的转换,但在Python中情况不同 我希望在Python2.6中有相同的行为 有谁能帮我解释一下为什么在Python2.6中不一样,以及在Python2.6中如何做 Python 2.6 >>> a '60.000,494.100,361.600,553.494' >>> eval(a) (60.0, 494.10000000000002, 361.60000000000002, 553.49
>>> a
'60.000,494.100,361.600,553.494'
>>> eval(a)
(60.0, 494.10000000000002, 361.60000000000002, 553.49400000000003)
>>> import ast
>>> ast.literal_eval(a)
(60.0, 494.10000000000002, 361.60000000000002, 553.49400000000003)
>>>
>>> for i in a.split(","):
... float(i)
...
60.0
494.10000000000002
361.60000000000002
553.49400000000003
>>>
Python 2.7
>>> a
'60.000,494.100,361.600,553.494'
>>> eval(a)
(60.0, 494.1, 361.6, 553.494)
>>> import ast
>>> ast.literal_eval(a)
(60.0, 494.1, 361.6, 553.494)
>>>
>>> for i in a.split(","):
... float(i)
...
60.0
494.1
361.6
553.494
看起来不太好
[编辑2]
我只打印值和条件
print fGalleyTopRightOddX, ">=", tLinetextBbox[2], fGalleyTopRightOddX>=tLinetextBbox[2]
361.6 >= 361.6 False
我从字符串中计算tlinetextbox
值,该值为361.6000000000002
,fGalletoPrightOddx
值为361.6
我正在从事PythonDjango项目,其中,apache是服务器
fGalleyTopRightOddX
即361.6
是在apache环境中计算的tlinetextbox
即361.6000000000002
在cmd上计算意味着我将fGalleyTopRightOddX
传递给通过命令行操作系统运行的程序
当我在文本文件中记录措辞时,我会得到
tlinetextbox
vale as361.599999997
为了在Python 2.6中获得相同的结果,必须明确执行以下操作:
'%.12g' % float_variable
最好创建一个自定义函数来执行以下操作:
def convert_to_my_float(float_value):
return float('%.12g' % float_value)
根据文件: 在版本2.6中更改:前导和尾随空格字符为 从字符串创建十进制实例时允许 在版本2.7中更改:构造函数的参数现在为 允许为浮点实例
他们为何表现不同的答案是什么?是,因为Python 2.7中的
float.\uuu repr\uuuuuuuuuuuuuuuuuuuuuuu()
和float.\uuuuuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。(提示“每个计算机科学家都应该知道的关于浮点数的知识”链接)@kennytm最好说,在这两种情况下,你得到了相同的错误值。@kennytm和Johan:谢谢,但我仍然得到了错误的答案。我更新了问题,你能再看一次吗?Thanx,但我还是得到了错误的答案。我更新了问题,你能再看一下吗?我想我还是不明白你的问题。为什么不从os
命令中计算值tlinetextbox
,从我提到的函数中获取所需的值,并将返回的值传递给您的命令?您的函数不工作,>>convert_to_my_float(361.6000000000002)361.6000000000002>>convert_to_my_float(361.6)361.6000000000002
我在有问题的Edit3中添加了一些信息。你能看一下吗?你的错误是什么?是不是类型错误:需要浮点参数,而不是str
?如果是,请在传递到函数之前将其强制转换为float
:float('361.6000000000002')