axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean ANDRE <jan...@cmtek.com>
Subject Re: float type and date time format
Date Mon, 13 Dec 2004 14:26:45 GMT
Bonjour  Samisa Abeysinghe,

Thank's a lot for this quick fix ;). I imagine that fix will help many 
other developpers!
Take care and have a nice day.
Jean A. - Canada

Samisa Abeysinghe wrote:

>Hi Jean,
>    I provided a quick fix for the floating point problem. 
>    Obviously, the problem is with the serilization of the float values.
>
>    With the fix, it will work correctly upto 4 decimal places. But
>for the fifth, it rounds off. Please see
>http://nagoya.apache.org/jira/browse/AXISCPP-320 for details.
>
>    If we wish to convert float values with more than four decimal
>places correctly, we may have to write our own sprintf for float
>values. Also we have the 4 decimal pace restriction with
>deserialization as well. The function used, strtod, can only deal with
>upto 4 decimal places correctly. If we want more precision, we may
>have to write our own function for strtod as well.
>
>Thanks,
>Samisa...
>
>
>On Thu, 09 Dec 2004 21:40:36 +0500, Jean ANDRE <jandre@cmtek.com> wrote:
>  
>
>>Bonjour John,
>>
>>Thank you very much for your answer.
>>In my case, as we talk about money and paiement system, it is
>>"unacceptable" to pay 98.989998 when the price is 98.99 !.
>>Well, well, as I sent the correct type according to the WSDL  and Axis
>>generation classes and as I have no way to modify the third party wsdl
>>file, that means it is a serious problem from Axis, whitout no quick
>>solution ? hum, hum...  :(
>>
>>So, to return back to the time date, do you think that is not a problem
>>for the webservice to understand such datetime? because I've still have
>>a problem of the XML parser. It is not  the name space ns1 instead of
>>nothing (see related answer, it should be ok)- . It is not the float
>>number ?, it is not the date-time format ?  and I still have a bat ptr
>>in Axis.... to get my value after a complex type on the answer from the
>>web services!
>>
>>Take care and thank again for your answer!
>>
>>Jean A - Canada
>>
>>
>>
>>
>>John Bodfish wrote:
>>
>>    
>>
>>>Bonjour aussi!
>>>
>>>I don't know the answer to most of your questions, but here are some
>>>comments.
>>>
>>>You wrote:
>>>      With float number, 77.99 becomes 77.989998 output string under Axis.
>>>
>>>I think that's probably because conversion of a string "77.99" to the
>>>representation of a floating point number and back again is likely to lead
>>>to "small" differences. Whether you think 0.000002 is a "small" difference
>>>probably depends on whether you're calculating the size of the moon or your
>>>trajectory to it. :) There's probably a way to restrict the number of
>>>decimal digits in the string representation of the floating point number, in
>>>which case "77.989998" internal representation would get rounded up to
>>>"77.99" when converted to a string.
>>>
>>>
>>>You also wrote:
>>>      I supposed that Z is for TimeZone?
>>>
>>>That's a good guess. 'Z' is for "UTC", or Coordinated Universal Time. See
>>>http://en.wikipedia.org/wiki/Coordinated_Universal_Time for more on UTC.
>>>
>>>The World Wide Web Consortium has a note about date and time formats
>>>(http://www.w3.org/TR/NOTE-datetime) where it states:
>>>
>>>"This profile defines two ways of handling time zone offsets:
>>>
>>>1. Times are expressed in UTC (Coordinated Universal Time), with a special
>>>UTC designator ("Z").
>>>2. Times are expressed in local time, together with a time zone offset in
>>>hours and minutes. A time zone offset of "+hh:mm" indicates that the
>>>date/time uses a local time zone which is "hh" hours and "mm" minutes ahead
>>>of UTC. A time zone offset of "-hh:mm" indicates that the date/time uses a
>>>local time zone which is "hh" hours and "mm" minutes behind UTC.
>>>
>>>A standard referencing this profile should permit one or both of these ways
>>>of handling time zone offsets."
>>>
>>>I don't know what the relevant SOAP standards state, but the date strings
>>>you get look like they both conform.
>>>
>>>The string "2004-12-08T00:00:00.0000000-05:00" that .NET/Java produces
>>>represents midnight, the morning of December 8th, 2004 in a time zone that
>>>is 5 hours behind UTC (such as the Eastern Time zone of Canada).
>>>
>>>The string "2004-12-09T19:54:32Z" that Axis produces represents December
>>>9th, 2004 at 19:54:32 UTC, which would be 14:54:32 in the Eastern Time Zone
>>>of Canada.
>>>
>>>I don't know where the asterisks in the Axis date string come from.
>>>
>>>I hope others help with the rest of your questions!
>>>
>>>John
>>>
>>>
>>>
>>>-----Original Message-----
>>>From: Jean ANDRE [mailto:jandre@cmtek.com]
>>>Sent: Thursday, December 09, 2004 9:31 AM
>>>To: axis-c-user@ws.apache.org
>>>Subject: float type and date time format
>>>
>>>Bonjour everybody!
>>>
>>>Well, I have a strange behavior with floating number and date time format.
>>>
>>>1 ) With float number, 77.99 becomes 77.989998 output string under
>>>Axis. Why I lost some digits ??????!!!
>>>
>>>2) With datetime format , in c++ test code, I just  moved some fields
>>>to another one of the same structure and I get the following output
>>>string: with Axis
>>>   <txnDate>*2004-12-09T19:54:32Z*</txnDate>
>>>
>>>I supposed that Z is for TimeZone ?  But how to construct a time to
>>>obtain such string ?
>>>
>>>With dot-net client application and a java application I got the
>>>following string:
>>><txnDate>2004-12-08T00:00:00.0000000-05:00</txnDate>
>>>
>>>Thanks a lot for your answers. Take care!
>>>
>>>Jean .A - Canada
>>>
>>>
>>>In c++ test code, I put the following code according to the WSDL.
>>>
>>>C++ Test code under Microsoft  Visual C++
>>>==============================
>>>class TxnAmount
>>>{
>>>public:
>>>   float amount;
>>>   xsd__string currency;
>>>   TxnAmount();
>>>   ~TxnAmount();
>>>};
>>>
>>>   xsd__dateTime txnDate;
>>>   tm* curTime;
>>>   time_t timer;
>>>
>>>
>>>   amount.amount = 77.99;                // paymentForm.amount
>>>   amount.currency = "USD";            // paymentForm.currency
>>>
>>>
>>>   memset(&txnDate, 0x00, sizeof(xsd__dateTime));
>>>   timer = time(NULL);
>>>   curTime = localtime( &timer );
>>>   txnDate.tm_isdst    = curTime->tm_isdst;
>>>   txnDate.tm_hour        = curTime->tm_hour;
>>>   txnDate.tm_min        = curTime->tm_min;
>>>   txnDate.tm_sec        = curTime->tm_sec;
>>>   txnDate.tm_wday        = curTime->tm_wday;
>>>   txnDate.tm_yday        = curTime->tm_yday;
>>>   txnDate.tm_mday        = curTime->tm_mday;             //
>>>paymentForm.txnDateD - day of the month - [1,31]
>>>   txnDate.tm_mon        = curTime->tm_mon;                //
>>>paymentForm.txnDateM - months since January - [0,11]
>>>   txnDate.tm_year        = curTime->tm_year;                //
>>>paymentForm.txnDateY - years since 1900
>>>
>>>Fragment of the WDSL:
>>>==================
>>>     <xs:element name="txnDate" type="xs:dateTime" minOccurs="0">
>>>     </xs:element>
>>>     <xs:complexType name="TxnAmount">
>>>       <xs:sequence>
>>>         <xs:element name="amount">
>>>           <xs:simpleType>
>>>             <xs:restriction base="xs:float">
>>>               <xs:minInclusive value="0.00"/>
>>>               <xs:maxInclusive value="9999999999.99"/>
>>>             </xs:restriction>
>>>           </xs:simpleType>
>>>         </xs:element>
>>>         <xs:element name="currency" minOccurs="0">
>>>           <xs:simpleType>
>>>             <xs:restriction base="xs:string">
>>>               <xs:enumeration value="USD"/>
>>>               <xs:enumeration value="CAD"/>
>>>             </xs:restriction>
>>>           </xs:simpleType>
>>>         </xs:element>
>>>       </xs:sequence>
>>>     </xs:complexType>
>>>
>>>
>>>Fragment of the string sent by AXIS ??  Look the field amount !!!!
>>>=============================================
>>><ns1:txnRequest>
>>><orderTotal>
>>><amount>77.989998</amount>
>>><currency>USD</currency>
>>></orderTotal>
>>><billTo>
>>>
>>><txnDate>*2004-12-09T19:54:32Z*</txnDate>
>>>
>>>
>>>
>>>
>>>
>>>
>>>      
>>>
>>    
>>
>
>  
>


Mime
View raw message