Actionscript 3 ActionScript-使用NumberFormatter格式化零?

Actionscript 3 ActionScript-使用NumberFormatter格式化零?,actionscript-3,format,number-formatting,zero,Actionscript 3,Format,Number Formatting,Zero,我已经为NumberFormatter对象指定了属性,以便格式化的值包含前导零、尾随零和2位小数 除非正在格式化的数字为0,否则格式化将起作用。如何使用设置的属性格式化0,使0变为0.00 var numFormat:NumberFormatter = new NumberFormatter(LocaleID.DEFAULT); numFormat.leadingZero = true; numFormat.trailingZeros = true; numFormat.fractionalDi

我已经为NumberFormatter对象指定了属性,以便格式化的值包含前导零、尾随零和2位小数

除非正在格式化的数字为0,否则格式化将起作用。如何使用设置的属性格式化0,使0变为0.00

var numFormat:NumberFormatter = new NumberFormatter(LocaleID.DEFAULT);
numFormat.leadingZero = true;
numFormat.trailingZeros = true;
numFormat.fractionalDigits = 2;

trace(numFormat.formatNumber(46));      //46.00
trace(numFormat.formatNumber(0.556849));  //0.56
trace(numFormat.formatNumber(0));        //0

[编辑] 如果格式化的数字为0,我已通过手动将所需的分数位数附加到区域设置十进制分隔符来修复此问题:

if (myFormattedNumber.text == "0" && numFormat.fractionalDigits)
   {
   myFormattedNumber.appendText(numFormat.decimalSeparator);

   for (var i:uint = 0; i < numFormat.fractionalDigits; i++)
       myFormattedNumber.appendText("0");
   }
if(myFormattedNumber.text==“0”&&numFormat.partitionldigts)
{
myFormattedNumber.appendText(numFormat.decimalSeparator);
对于(变量i:uint=0;i

我仍然很想知道这是一个bug还是一个功能,但对我来说这似乎是一个疏忽。

这并不性感,但这与我遇到类似问题时使用的类似:

function numberFormat(number:*, maxDecimals:int = 2, forceDecimals:Boolean = false, siStyle:Boolean = true):String 
{
    var i:int = 0, inc:Number = Math.pow(10, maxDecimals), str:String = String(Math.round(inc * Number(number))/inc);
    var hasSep:Boolean = str.indexOf(".") == -1, sep:int = hasSep ? str.length : str.indexOf(".");
    var ret:String = (hasSep && !forceDecimals ? "" : (siStyle ? "," : ".")) + str.substr(sep+1);
    if (forceDecimals) for (var j:int = 0; j <= maxDecimals - (str.length - (hasSep ? sep-1 : sep)); j++) ret += "0";
    while (i + 3 < (str.substr(0, 1) == "-" ? sep-1 : sep)) ret = (siStyle ? "." : ",") + str.substr(sep - (i += 3), 3) + ret;
    return str.substr(0, sep - i) + ret;
}


trace("zero: " + numberFormat(0, 2, true, false))
函数numberFormat(number:*,maxDecimals:int=2,forceDecimals:Boolean=false,siStyle:Boolean=true):字符串
{
变量i:int=0,inc:Number=Math.pow(10,最大小数),str:String=String(Math.round(inc*Number(Number))/inc);
变量hasSep:Boolean=str.indexOf(“.”)=-1,sep:int=hasSep?str.length:str.indexOf(“.”);
变量ret:String=(hasSep&&!forceDecimals?”:(siStyle?”,“:”)+str.substr(sep+1);

if(forceDecimals)for(var j:int=0;j关于
Number(value)如何。toFixed(2)

使用NumberFormatter并不简单。数字是针对特定地区格式化的。例如,在北美,使用具有上述属性的NumberFormatter的数字5000被转换为“5000.00”,而在欧洲则可能是“5.000,00”(注意分隔符)。这段代码太可怕了。lol。如果返回的字符串为零,也可以简单地在其上附加“.00”。这似乎是NumberFormatter类中的错误。formatNumber()、formatInt()和formatUint()都返回“0”"如果传递给格式化程序的值为0,则没有所需的格式。哈哈,是的,绝对不性感。这是用于货币格式化的东西,尤其是非美国货币。如果您更改某些设置,追加“.00”并不总是做您想要做的事。此外,0在Flash Player 11中返回0.00,因此可能您不必做任何事情。什么潜在的pitfall在if(numberString.text==“0”)numberString.appendText(“.00”);中有吗?另外,你能解释更多关于Flash Player 11的信息吗?有链接吗?