I agree that the change has value for Bitcoin, I'm simply saying that because interoperability is the stated goal of the PR it looks preferable not to break existing interoperability.

It seems more reasonable to me to use the much simpler

    out.tx->vout[out.i].nValue.ToInt64()

instead of

    EncodeDouble(out.tx->vout[out.i].nValue.ToDouble())

in Bitcoin and use the more complicated version only in implementations which actually implement sub-satoshi precision. That would also remove the entire EncodeDouble function from Bitcoin code, reducing the overall code size.