You may have to multiply by 100, covert the whole thing to string, test the
'number' after the decimal and decide what you want to do and convert to
integer. And this will chew up a CPU if there are a lot of numbers to
process, but I don't see another option. This assumes you have a rule set
for the 'number'.

John Warner




> -----Original Message-----
> From: Discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] On Behalf Of Eddie Lascu
> Sent: Monday, August 25, 2008 1:50 PM
> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> Subject: Re: [ADVANCED-DOTNET] Converting doubles into
> integers without rounding errors
>
>
> The problem is that I have to multiply by 100 before
> rounding, so the double must no be off by more than 0.005.
> For example, if 4.56 is actually stored as 4.5610, the number
> multiplied by 100 will be 456.100 which gets to 456.600 when
> adding 0.5 which rounds up to 457.
>
> I feel like my brain is about to explode...
>
>
> -----Original Message-----
> From: Discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] Behalf Of Terry Griffin
> Sent: Monday, August 25, 2008 1:27 PM
> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> Subject: Re: [ADVANCED-DOTNET] Converting doubles into
> integers without rounding errors
>
>
> The problem with going from a double to an int is that the
> final digit can be cut off because the double is inexact. But
> the double will be close. All you need to do is add 0.5 to
> the value before doing the conversion to an int. The "extra"
> 0.5 will make a value like 4.999999999 get converted to 5
> instead of 4. Unless your original numbers are off by a large
> amount (close to 0.5) this won't introdcue any error.
>
> int intVal;
> double dblVal;
>
> intVal = (int)(dbleVal * 100 + 0.5);
>
>
>
> Terry Griffin
> Sr. Software Engineer
> Carl Zeiss SMT Inc.
> ALIS Business Unit
> 1 Corporation Way
> Peabody, MA 01960 USA
> [EMAIL PROTECTED]
> (978) 826-1569
>
>
>
>
> Daniel Barla-Szabo <[EMAIL PROTECTED]>
> Sent by: "Discussion of advanced .NET topics."
> <ADVANCED-DOTNET@DISCUSS.DEVELOP.COM>
> 08/25/2008 01:10 PM
> Please respond to
> "Discussion of advanced .NET topics."
> <ADVANCED-DOTNET@DISCUSS.DEVELOP.COM>
>
>
> To
> ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> cc
>
> Subject
> Re: [ADVANCED-DOTNET] Converting doubles into integers
> without rounding errors
>
>
>
>
>
>
> Personally, I've never used it before, but I see in framework
> 2.0 there is the option of:
>
> (int) Double.Truncate(objMyObject.Amount * 100);
>
> HTH
>
> -----Original Message-----
> From: Discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] On Behalf Of Eddie Lascu
> Sent: 25 August 2008 06:28 PM
> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> Subject: [ADVANCED-DOTNET] Converting doubles into integers
> without rounding errors
>
> Hello everyone,
>
> I have some objects that contain an amount field that is
> declared as double. Since it contains amounts, it always has
> only two decimal digits that are significant. During the
> process I need to convert that double into an integer by
> removing the decimal point. For example, $78.59 should be
> converted to integer 7859 and $101.53 to 10153. in my code I
> have uint nIntAmount = (uint)(objMyObject.Amount * 100);
>
> The problem I am facing is that sometimes, very rarely, there
> is a rounding error that is introduced and the integer
> obtained is off by a cent (plus or minus). For example, this
> is a line that was traced in my log file:
>
> "Updating the batch with $137.89 as the amount in the
> transaction. This amount was converted to 13788."
>
> Can either of you suggest a different way to convert the
> amounts in integers without this nagging rounding error?
>
> Any help will be appreciated,
>
> Eddie
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
>
>
>
> ----------------------------------------
> This message is intended for a particular addressee only and
> may contain business or company secrets. If you have received
> this email in error, please contact the sender and delete the
> message immediately. Any use of this email, including saving,
> publishing, copying, replication or forwarding of the message
> or the contents is not permitted.
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to