2014-01-06 1 views
1

문제는 파이어 폭스 2.7.5에 Simplejson의 일부 버전이 있고 데비안 6 서버에 파이썬 2.6.6에 simplejson 버전이있다는 것입니다. 하지만 무슨 일이 벌어지고있는 것입니까? 내 노트북에파이썬 심플 슨 조정 문제

>>> import simplejson as json 
>>> streamer_data = json.loads('{"text": "test","geo": {"type": "Point","coordinates": [52.68908263, -8.50845340]},"coordinates": {"type": "Point","coordinates": [-8.50845340, 52.68908263]}}'); 

>>> print streamer_data 
{u'text': test', u'geo': {u'type': u'Point', u'coordinates': [52.689082630000001, -8.5084534000000005]}, u'id': 420024061457346560L, u'coordinates': {u'type': u'Point', u'coordinates': [-8.5084534000000005, 52.689082630000001]}} 

이 값을 조정하기 위해 적절한 정밀도 정확한 결과 제공 - -

>>> print streamer_data 
{'text': 'test', 'geo': {'type': 'Point', 'coordinates': [52.68908263, -8.5084534]}, 'coordinates': {'type': 'Point', 'coordinates': [-8.5084534, 52.68908263]}} 

을이이 simplejson 버전입니다 데비안 서버는 simplejson는 좌표 값에 추가 정밀도를 추가하는 것입니다 문제 정도 다른 것. 또한 나는 데비안 서버에서 simplejson의 버전을 알아 내려고했지만 성공하지 못했습니다.

+1

확실하지 않습니다. 이것은 도움이 될지 모르지만 그것은 단순하지 않습니다. http://stackoverflow.com/questions/1447287/format-floats-with-standard-json-module – valheru

+0

질문에 의문의 여지가 없습니다. –

답변

4

파이썬 2.6과 2.7의 차이점은 simplejson과 아무런 관련이 없습니다. 2.7에는 changes to the algorithms used to produce the string representation and rounding of floating point numbers이 있습니다. 네드의 대답 @

$ python2.6 -c "print([52.68908263, -8.50845340])" 
[52.689082630000001, -8.5084534000000005] 
$ python2.7 -c "print([52.68908263, -8.50845340])" 
[52.68908263, -8.5084534] 
+0

완벽한 .. 감사합니다. 이건 저에게 효과적입니다. 까다로운 부분은 파이썬 2.7을 데비안 6에 설치하는 것이었지만 그 문제는 http://www.yodi.sg/install-python-2-7-debian- 6-0-squeeze/ – UberNeo

+0

BTW에서 파이썬 2.6에서이 작업을 수행 할 수있는 해결 방법은 http://stackoverflow.com/a/1447562/2374316을 사용하려고 시도했지만 ..이 또한 2.6에서 작동하는 것 같습니다. – UberNeo

+0

이걸 바꿀 필요가 있니? 로버트 시머 (Robert Siemer)가 그의 대답에서 언급했듯이, 이것은 실제로 시각적 인 차이입니다. 2.6 또는 2.7 표현의 2 진 값은 동일해야합니다. 그렇지 않으면 Python 2.7로 업그레이드하는 것이 더 간단 할 것입니다. –

0

는 정확하지만 내가 추가하고 싶습니다 :

문제는 시각적 하나, 두 표현은 정확히 "정상"컴퓨터에서 동일한 있습니다. 모두는 정확히의 어떤 컴퓨터 (수) 저장 : 지금

>>> a = 52.68908263 
>>> b = 52.689082630000001 
>>> '{0:.30} = {1:.30}: {2}'.format(a, b, a==b) 
Python 2.6: 
'52.6890826300000014725810615346 = 52.6890826300000014725810615346: True' 
Python 2.7: 
'52.6890826300000014725810615346 = 52.6890826300000014725810615346: True' 

으로 볼 수 : 전혀 그 숫자 사이에는 차이. Python2.7은 동일한 내부 값으로 반올림 될 때 숫자의 짧은 표현을 인쇄합니다. Python2.7은 일부 시스템 (일부 컴파일러 사용)에서만 수행 할 수 있습니다 (sys.float_repr_style 확인, "짧음"또는 "기존").