Return-Path: Delivered-To: apmail-ws-axis-c-dev-archive@www.apache.org Received: (qmail 78451 invoked from network); 13 Dec 2004 02:35:59 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 13 Dec 2004 02:35:59 -0000 Received: (qmail 93330 invoked by uid 500); 13 Dec 2004 02:35:58 -0000 Delivered-To: apmail-ws-axis-c-dev-archive@ws.apache.org Received: (qmail 93301 invoked by uid 500); 13 Dec 2004 02:35:58 -0000 Mailing-List: contact axis-c-dev-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: List-Id: "Apache AXIS C Developers List" Reply-To: "Apache AXIS C Developers List" Delivered-To: mailing list axis-c-dev@ws.apache.org Received: (qmail 93284 invoked by uid 99); 13 Dec 2004 02:35:58 -0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=RCVD_BY_IP,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: domain of samisa.abeysinghe@gmail.com designates 64.233.184.207 as permitted sender) Received: from wproxy.gmail.com (HELO wproxy.gmail.com) (64.233.184.207) by apache.org (qpsmtpd/0.28) with ESMTP; Sun, 12 Dec 2004 18:35:55 -0800 Received: by wproxy.gmail.com with SMTP id 36so253432wra for ; Sun, 12 Dec 2004 18:35:53 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:references; b=LKw7Oi9zSbDeMdYDhjS3Qvx8tZCSSe0fdlyQ3+n2Hs6o4gFc5e+beJ6ACP5khwJlCu6Eagu2qzR2baDZ+i5Bwxy+bklA7WW/xVS+0W+wU3PFNjG65nABQ0l5x1U3Aa/tYAYZL03tCQPOzuc+MrD9giPqeBO1CnoQRIRMiPAP3lo= Received: by 10.54.28.75 with SMTP id b75mr1867965wrb; Sun, 12 Dec 2004 18:35:53 -0800 (PST) Received: by 10.54.28.30 with HTTP; Sun, 12 Dec 2004 18:35:53 -0800 (PST) Message-ID: Date: Mon, 13 Dec 2004 02:35:53 +0000 From: Samisa Abeysinghe Reply-To: Samisa Abeysinghe To: Apache AXIS C User List , Apache AXIS C Developers List Subject: Re: float type and date time format In-Reply-To: <41B88004.3040504@cmtek.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit References: <20041209160823.211383F74@mail.fdusa.com> <41B88004.3040504@cmtek.com> X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N 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 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 > > *2004-12-09T19:54:32Z* > > > > 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: > >2004-12-08T00:00:00.0000000-05:00 > > > >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: > >================== > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >Fragment of the string sent by AXIS ?? Look the field amount !!!! > >============================================= > > > > > >77.989998 > >USD > > > > > > > >*2004-12-09T19:54:32Z* > > > > > > > > > > > > > >