pythonとIronPythonのfloatに対するrepr()の違い

GPS情報をJSONで返すcgipython 2.4 + json.py 3.4で作っていると、なんか精度悪い。なんだろうと思って調べてみるとfloat型のjson.write()が小数点以下6桁しか出力していないためだと判明。
まだpythonのfloatはよく分かってないけど、精度は実装に依存する模様。でも、さすがに6桁はないだろうと思ってf = 1.23456789123456789 ; print fとすると11桁まで出力された。
なんでjson.write()は6桁なのかとjson.pyのソースを追ってみると、浮動小数点型を文字列に変換する時に使っている『'%f' % obj』でバッサリ切られるらしい。

D:\Program Files\Python24>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = 1.12345678901234567890
>>> print f
1.12345678901
>>> print '%f' % f
1.123457
>>> print repr( f )
1.1234567890123457

色々出力してみると、上記のようになったので、『'%f' % obj』をrepr( obj )に変更すると16桁まで出力できた。うーん、なんで『'%f' % obj』使ってるのかな。
ちなみに、IPCE-r5やIronPythonではrepr()はprintと同じ11桁でした。