• 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: NSNumberFormatter and localized format problem
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSNumberFormatter and localized format problem


  • Subject: Re: NSNumberFormatter and localized format problem
  • From: Chris Kane <email@hidden>
  • Date: Sun, 30 Apr 2006 10:07:13 -0700

Don't use setFormat: and setLocalizesFormat: with a 10_4 behavior NSNumberFormatter. Those are old methods for compatibility with old- style behavior formatters. They may do something similar to what happened with an old-behavior formatter, on a new-behavior formatter, but it's better to use the new methods (like setLocale:) with a new- behavior formatter for more accurate results.


With 10_0 behavior formatters, there is an ancient bug where it won't parse input with the formatter's own thousands separator in it. That's not a problem when you're typing a number greater than 999, because you probably aren't including the thousand separator. But nowdays, for whatever reason, AppKit parsers and formats the user's input several times through the formatter, and one of these stages passes the formatter's output back into the formatter, and the formatter can't parse it's own output (depends a bit on how it's set up).


Somebody else was hitting this recently. I suggested a workaround might be (but didn't try it) to subclass NSNumberFormatter, override the getObjectValue:... method, strip out the thousand separator from the string parameter, then call super getObjectValue:... with the result.


I agree with Tony Wu, too, that the currency symbol shouldn't be required in user input (and should be assumed to be the locale's default currency). There's no lenient number parsing setting in the ICU API, so I don't know if there's a way for NSNumberFormatter to turn that requirement off for a currency-style formatter. I also agree with Kenny Leung that formatters should have multiple input formats, and there's an enhancement request or two about that, but enhancing formatters in that way has never been high enough priority for anybody to get to it.



Chris Kane Cocoa Frameworks, Apple

On Apr 27, 2006, at 2:16 PM, Eric Morand wrote:

It doesn't work.

As I've said earlier, here is what I tried :

[ aFormatter setFormat:@"#,###.00 $;0.00 $;#,##0.00 $"];
[ aFormatter setLocalizesFormat:YES];

If I type 150 in my test field, the formatter correctly format to 150,00 €.

But if I type a number greater than 999, the formatter returns nil.





Le 27 avr. 06 à 21:10, Kenny Leung a écrit :

How about setLocalizesFormat:?

"Sets whether the dollar sign character ($), decimal separator character (.), and thousand separator character (,) are converted to appropriately localized characters as specified by the user’s localization preference."

-Kenny


On Apr 27, 2006, at 11:49 AM, Eric Morand wrote:


I understand what you mean.

What I don't understand is what is the official (i.e. Apple) method to format a number with the localized format of the user ? I can't guess what are the number format of every country in the world, right ?



Le 27 avr. 06 à 17:15, Kenny Leung a écrit :

Hi All.

This is a basic flaw in the design of formatters in general. Formatters should have separate, multiple, input formats and a single output format. Or maybe multiple, localization dependent, output formats. It is not too difficult to write your own formatter. There are only a couple of methods to implement. I once wrote a date formatter using flex that could recognize many different date formats. If you want to use the parsing infrastructure of NSNumberFormatter, you could just write a wrapper formatter that contains multiple NSNumberFormatters, one for each input format you want, and one for the output format.

-Kenny


On Apr 27, 2006, at 7:25 AM, Tony S. Wu wrote:

exactly.
you have to type in $1 instead of 1 (pointed out by mmalcolm).
this is a problem i encountered before.
i don't know why it's so restricted and couldn't figure out how to solve it, and ended up abandoning NSNumberFormatterCurrencyStyle.
if anyone could offer a work around, i'd very much appreciate it.


Tony S. Wu
email@hidden



On Apr 27, 2006, at 12:36 AM, Eric Morand wrote:
I've typed exactly the lines you gave to me on my awakeFromNib :

- (void)awakeFromNib
{
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];

[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];

[testTF setFormatter:numberFormatter];
}


(testF being the text field)

Now, each time I type a number (I tried typing "1") in the field (and the fiel lose the first responder status), I have a sheet that is displayed with a format error message (in french is says "Erreur de formatage" that should translate in "Formatting error").




Eric.


Le 27 avr. 06 à 07:34, Tony S. Wu a écrit :

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];

[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];


should work.
also, a got-cha in NSNumberFormatterCurrencyStyle is that when the control is set to display with currency style, it has to have the input data WITH the currency symbol as well.
meaning (in US currency) when a user inputs "24.00" it is considered inappropriate.
he/she has to input "$24.00".
i encountered this problem with my table column, if anyone finds anyway around this or my information incorrect, please do let me know.


Tony S. Wu
email@hidden



On Apr 26, 2006, at 2:05 PM, Eric Morand wrote:


Le 26 avr. 06 à 17:05, Nick Zitzmann a écrit :


On Apr 26, 2006, at 7:42 AM, Eric Morand wrote:

Am I doing something wrong ? How am I suppposed to display correctly formatted amount in my text field ?

-setNumberStyle: only works if you're using an NSNumberFormatter that uses the Tiger behavior. Did you try setting the behavior of the formatter first?


Yes, I've just added it doesn't format anything. If I type 1500 in the field, it remains 1500 instead of 1 500,00 €. I just don't get it.



Nick Zitzmann <http://www.chronosnet.com/>





_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40mac.com


This email sent to email@hidden


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40mac.com


This email sent to email@hidden



_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40pobox.com


This email sent to email@hidden



_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40mac.com


This email sent to email@hidden

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40pobox.com


This email sent to email@hidden



_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
40mac.com


This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
References: 
 >NSNumberFormatter and localized format problem (From: Eric Morand <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Nick Zitzmann <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Eric Morand <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: "Tony S. Wu" <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Eric Morand <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: "Tony S. Wu" <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Kenny Leung <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Eric Morand <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Kenny Leung <email@hidden>)
 >Re: NSNumberFormatter and localized format problem (From: Eric Morand <email@hidden>)

  • Prev by Date: Cocoa & Java on Intel fails with "Java for ppc cannot run in this configuration"
  • Next by Date: Re: bug in NSPersistentDocument tutorial?
  • Previous by thread: Re: NSNumberFormatter and localized format problem
  • Next by thread: Horizontal NSTableView OR How I learned to Bind NSTableView Columns Instead of Rows
  • Index(es):
    • Date
    • Thread