Apache flex 从没有默认小数分隔符的字符串中获取数字

Apache flex 从没有默认小数分隔符的字符串中获取数字,apache-flex,localization,numbers,decimal,flex4.5,Apache Flex,Localization,Numbers,Decimal,Flex4.5,我有一个文本输入,其中需要返回一个号码。 我的问题是,输入的值被本地化为登录用户,这会影响十进制分隔符。 当我试图从波兰用户那里获得一个数字时,我似乎总是得到一个NaN,但它对英语用户非常有效: 输入示例: 中文:23.5 波兰:23,5 有解决办法吗?我有以下不起作用的问题: public function get myValue():Number { var value:Number = new Number(StringUtil.trim(text)); //NaN with Po

我有一个
文本输入
,其中需要返回一个
号码
。 我的问题是,输入的值被本地化为登录用户,这会影响十进制分隔符。 当我试图从波兰用户那里获得一个数字时,我似乎总是得到一个
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
工作正常,但总是调用
newnumber(“23,5”)
给出
NaN
现在无法测试它,但我想它应该可以工作:

public function get myValue():Number 
{
    var value:Number = getNumberFormatter.parseNumber(StringUtil.trim(text));
    return value;
}
我认为关键是,你应该使用

[更新] 以下是一个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  ")));

假设您的号码在每个10^3号码组之间没有返回逗号(即1000000代表100万),您可以在逗号上使用替换

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

这将用句点替换数字中的所有逗号,系统应将其作为正常数字读取。

parseNumber仅返回字符串,因此我认为这不起作用。我尝试将它与一个新的数字(…parseNumber(text))一起使用,但它仍然提供NaN@Marthin根据定义返回一个
编号
!你说得对。在我的IDE中,它表示返回类型字符串,但它的值是错误的=)。Thx的帮助这是所有伟大的,它解决了我的问题,但不是我的问题,因为在最后我需要的东西,可以处理断言(23,5,数字),其中数字是新的数字格式(“pl”)。解析数字(“23,5”);我需要这个做我的工作validator@Marthin对不起,我不明白你的问题。这肯定会起作用:
assertEquals(23.5,新的NumberFormatter(“pl”).parseNumber(“23,5”)