Red Hat Bugzilla – Bug 513426
string to double conversion results in questionable precision
Last modified: 2014-12-01 18:14:43 EST
The following test: public void testString2Double_1() { try { Message message = senderSession.createMessage(); message.setStringProperty("pi", "3.14159"); assertEquals(3.14159, message.getDoubleProperty("pi"),0); } catch (JMSException e) { fail(e); } } Fails with: junit.framework.AssertionFailedError: expected:<3.14159> but was:<3.141590118408203> This appears to be because the client ends up doing the equivalent of Double.valueOf(Float.valueOf(value)) when doing string to double conversion rather than the more direct Double.valueOf(value).
Fixed in upstream (tracked via QPID-2766). http://svn.apache.org/viewcvs?view=rev&rev=979933 http://svn.apache.org/viewcvs?view=rev&rev=980143 Git commit URL http://mrg1.lab.bos.redhat.com/cgit/qpid.git/commit/?id=b2d97e5cff91512b6ef98961b7d78b7bf3ffc8ef http://mrg1.lab.bos.redhat.com/cgit/qpid.git/commit/?id=e46526cfb6031efbb7c3ffb08358df4fd4c20895
fixed in qpid-java-client-0.7.946106-10.el5 validated on RHEL5.5/RHEL 4.8 i386 / x86_64 packages: # rpm -qa | grep -E '(qpid|openais|rhm)' | sort -u openais-0.80.6-16.el5_5.7 openais-devel-0.80.6-16.el5_5.7 python-qpid-0.7.946106-14.el5 qpid-cpp-client-0.7.946106-17.el5 qpid-cpp-client-devel-0.7.946106-17.el5 qpid-cpp-client-devel-docs-0.7.946106-17.el5 qpid-cpp-client-ssl-0.7.946106-17.el5 qpid-cpp-mrg-debuginfo-0.7.946106-14.el5 qpid-cpp-server-0.7.946106-17.el5 qpid-cpp-server-cluster-0.7.946106-17.el5 qpid-cpp-server-devel-0.7.946106-17.el5 qpid-cpp-server-ssl-0.7.946106-17.el5 qpid-cpp-server-store-0.7.946106-17.el5 qpid-cpp-server-xml-0.7.946106-17.el5 qpid-java-client-0.7.946106-10.el5 qpid-java-common-0.7.946106-10.el5 qpid-tools-0.7.946106-11.el5 rhm-docs-0.7.946106-5.el5 rh-tests-distribution-MRG-Messaging-qpid_common-1.6-53 ->VERIFIED
Technical note added. If any revisions are required, please edit the "Technical Notes" field accordingly. All revisions will be proofread by the Engineering Content Services team. New Contents: Cause: String to double conversion results in questionable precision. Consequence: If we set a property name "pi" as follows message.setStringProperty("pi", "3.14159"); And when it's retrieved as double using message.getDoubleProperty("pi"),0) it returns "3.141590118408203" Fix: The code now correctly converts the string value directly to double instead of converting it to a float and then to a double. Result: The get method now returns the value with the correct precision.
Technical note updated. If any revisions are required, please edit the "Technical Notes" field accordingly. All revisions will be proofread by the Engineering Content Services team. Diffed Contents: @@ -1,9 +1 @@ -Cause: String to double conversion results in questionable precision. +Previously, a string to double conversion returned imprecise results. With this update, string values are correctly converted directly to double values instead of converting them to a float value and then to a double value.- -Consequence: If we set a property name "pi" as follows message.setStringProperty("pi", "3.14159"); -And when it's retrieved as double using message.getDoubleProperty("pi"),0) it returns "3.141590118408203" - -Fix: The code now correctly converts the string value directly to double instead of converting it to a float and then to a double. - - -Result: The get method now returns the value with the correct precision.
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2010-0773.html