Ned Deily <n...@acm.org> added the comment: This should no longer be an issue on most platforms as of Python 2.7 and Python 3.1. Both added a new algorithm such that "the repr() of a floating-point number x now returns a result based on the shortest decimal string that’s guaranteed to round back to x under correct rounding". The new float repr applies to plistlib as well. Here's an example:
$ cat pl.py from plistlib import readPlistFromString, writePlistToString d1 = dict(a=0.15) s1 = writePlistToString(d1) print(s1) d2 = readPlistFromString(s1) print(d2) assert d1['a'] == d2['a'] print(d2['a'].hex()) $ python2.6 pl.py <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>a</key> <real>0.14999999999999999</real> </dict> </plist> {'a': 0.14999999999999999} 0x1.3333333333333p-3 $ python2.7 pl.py <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>a</key> <real>0.15</real> </dict> </plist> {'a': 0.15} 0x1.3333333333333p-3 Note that the binary representation of the float is the same on both 2.6 and 2.7 in this case anyway. For more info, see: http://docs.python.org/py3k/whatsnew/3.1.html#other-language-changes http://docs.python.org/whatsnew/2.7.html#other-language-changes ---------- nosy: +ned.deily resolution: -> out of date stage: -> committed/rejected status: open -> closed _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue14896> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com