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
Post a Comment