On 23 Sep 2011, at 6:48 PM, Philip McIntosh wrote:

> I have a calculation project using buttons to input numbers into a UILabel. I 
> want it to format the numbers as they are entered to display grouping 
> separators. It has been a struggle but so far the best I have ben able to 
> achieve is this (I got the basic idea from a post at stackoverflow.com):

A threshold question: Do I understand correctly that the only record you have 
of the value of your accumulator is the text contents of a label? Why? When you 
call

>    NSDecimalNumber *number = [NSDecimalNumber 
> decimalNumberWithString:currentText];

you have no control at all over how the label's text is converted to a decimal. 
It may or may not be lossy. Better that you keep, as a model object, the 
decimal value, and avoid repeated round trips through the default parser. (You 
are careful to specify U.S. grouping and decimal separators for _output_, but 
the convenience parser you're using will use the separators from the current 
locale.)

The rule is that you never, ever keep program state in a display object. If you 
_must_ go through a string (which should still be a model object, and not 
simply be left lying around in a label), set up an NSNumberFormatter and 
setGeneratesDecimalNumbers:YES, so you can get some control. You can then keep 
the formatter in a static variable, and reuse it for repeated conversions in 
both directions — the round trip will be likelier to preserve your intended 
value.

I'm also curious to know what you intend by 

>    currentText = [currentText stringByReplacingOccurrencesOfString:@"." 
> withString:@"."];

Once you've tamed those issues, see if your 

        — F

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to