1

TextInputを返す必要がある場所がありNumberます。私の問題は、入力された値がログインしているユーザーにローカライズされ、それが小数点記号に影響することです。ポーランド語のユーザーから番号を取得しようとすると、常に を取得するようですがNaN、英語のユーザーにはうまく機能します。

入力例: 英語: 23.5 ポーランド語: 23,5

これに対する回避策はありますか? 動作しない次のものがあります。

public function get myValue():Number {
    var value:Number = new Number(StringUtil.trim(text)); //NaN with Polish
    return value;
}

私も次のことを試しましたが、それも与えます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;
}

NumberFormatterコードをデバッグすると、が正しく動作することがわかりますが、その呼び出しnew Number("23,5")では常にNaN.

4

2 に答える 2

1

数値が各 10^3 数値グループ間 (つまり、100 万の場合は 1,000,000) でコンマを使用して返されていないと仮定すると、カンマで置換を使用できます。

Number("23,5".replace(",","."); // output Number( "23.5" ) = 23.5

これにより、数値内のすべてのコンマがピリオドに置き換えられ、システムによって通常の数値として読み取られるはずです。

于 2013-08-28T20:06:41.903 に答える
1

今はテストできませんが、うまくいくはずです:

public function get myValue():Number 
{
    var value:Number = getNumberFormatter.parseNumber(StringUtil.trim(text));
    return value;
}

キーは、 parseNumber()を使用する必要があることだと思います!

[更新] 理解を深めるための FlexUnit テストを次に示します。

[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);
}

ご覧のとおりNumberFormatter、小数点と桁区切りを正しく処理します。

フォーマットし直したい場合は、次のように使用できます。

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  ")));
于 2013-08-28T14:58:34.693 に答える