flex - Get a Number from String with no default decimal separator -


i have textinput need return number. problem entered value localized logged in user , effects decimal separator. seem nan when try number polish user works great english users:

input example: english: 23.5 polish: 23,5

is there workaround this? have following doesn't work:

public function myvalue():number {     var value:number = new number(stringutil.trim(text)); //nan polish     return value; } 

i have tried following gives nan:

private function myvalue(number:number, precision:number=2):number{     var numberformatter:numberformatter = getnumberformatter(precision);     return new number(numberformatter.formatnumber(number)); }  private function getnumberformatter(precision:number=2):numberformatter{     var iso:string = clientinfo.instance.language.isocode;     var formattediso:string = iso.substr(0, 2)+'_'+iso.substr(2,2);     var numberformatter:numberformatter = new numberformatter(formattediso);     numberformatter.fractionaldigits = precision;     numberformatter.trailingzeros = true;     return numberformatter; } 

when debug code can see numberformatter works correctly call new number("23,5") gives nan.

can't test now, guess should work:

public function myvalue():number  {     var value:number = getnumberformatter.parsenumber(stringutil.trim(text));     return value; } 

i think key is, should use parsenumber()!

[update] here flexunit test better understanding:

[test] public function test(): void {     var number: number = new numberformatter("de-de").parsenumber("23,5");     assertequals(23.5, number);      number = new numberformatter("en-us").parsenumber("23.5");     assertequals(23.5, number);      number = new numberformatter("de-de").parsenumber("1.023,456");     assertequals(1023.456, number);      number = new numberformatter("pl-pl").parsenumber("1023,45");     assertequals(1023.45, number);      number = new numberformatter("pl-pl").parsenumber("1.023,45");     asserttrue(isnan(number));      number = new numberformatter("pl-pl").parsenumber("1 023,45");     assertequals(1023.45, number);      number = new numberformatter("pl-pl").parsenumber("  10 531 023,45  ");     assertequals(10531023.45, number); } 

as can see numberformatter handles decimal , thousands separator correctly.

if want format back, use this:

var numfmt: numberformatter = new numberformatter("pl-pl"); assertequals("23,50", numfmt.formatnumber(numfmt.parsenumber("  23,5  "))); numfmt.fractionaldigits = 1; assertequals("23,6", numfmt.formatnumber(numfmt.parsenumber("  23,57  "))); 

Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -