• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: rounding a float
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: rounding a float


  • Subject: Re: rounding a float
  • From: "Jay Rimalrick" <email@hidden>
  • Date: Sun, 30 Nov 2003 00:16:54 -0500

Can you explain why my last example where I used an int to get rid of the float
imperfections did not work?

Thanks for your help.


---------- Original Message ----------------------------------
From: Ed Watkeys <email@hidden>
Date: Sat, 29 Nov 2003 22:41:59 -0500

>On Nov 29, 2003, at 7:17 PM, Jay Rimalrick wrote:
>
>> What is the easiest way to round a float value with either c or
>> objective-c. I
>> need this float value to be consistent with the rounding of currency
>> e.g.
>> 1.255 rounds to 1.26 and
>> 1.254 rounds to 1.25
>
>You can't do this with floating point numbers; their representation
>makes it impossible. Consider the following program, float-test:
>
>#include <stdlib.h>
>#include <stdio.h>
>
>int main (int argc, char **argv) {
> int i;
> float f = 0.0f, g= 123.456789f;
>
> for(i = 0; i < 10000; i++) {
> printf("%.10f\n", f);
> f += 0.10f;
> }
>
>}
>
>When run on my PowerBook, I get the following result:
>
>-bash-2.05b$ ./float-test | tail -1
>999.8029174805
>
>Hmm. Off by about 0.197. Floating point arithmetic is by nature
>inexact; floating point numbers are represented by a binary mantissa
>and an exponent. The mantissa only has so much precision, and no amount
>of calculating is going to get you nice round (decimal) numbers. I
>believe Knuth's Art of Computer Programming, Volume 2 addresses
>floating point arithmetic. I used single precision floats in this
>example; doubles would produce the same phenomenon, albeit the error
>would be smaller.
>
>Unless you want to use a special-purpose arbitrary precision math
>library, here's an example of what you probably want to do:
>
>[NSString stringWithFormat:@"%.2f", 1.25]
>
>Round floats for presentation to humans by creating strings. That said,
>if you're dealing with money, you're better off calculating everything
>using integers and then doing input and output that interprets the
>integer as a fixed-precision decimal number. Why? Integer arithmetic is
>exact.
>
>Ed
>_______________________________________________
>cocoa-dev mailing list | email@hidden
>Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/
cocoa-dev
>Do not post admin requests to the list. They will be ignored.
>




________________________________________________________________
Sent via the WebMail system at 1st.net
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

  • Follow-Ups:
    • Re: rounding a float
      • From: Ed Watkeys <email@hidden>
  • Prev by Date: Re: NSIndexSet
  • Next by Date: Re: TableView drag n drop between 2 in same app
  • Previous by thread: Re: rounding a float
  • Next by thread: Re: rounding a float
  • Index(es):
    • Date
    • Thread