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