首页 文章

ActionScript - 使用NumberFormatter格式化零?

提问于
浏览
2

我已经为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

[EDIT] 如果格式化的数字为0,我通过手动附加具有所需numberalDigits数量的区域设置小数分隔符来解决此问题:

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

   for (var i:uint = 0; i < numFormat.fractionalDigits; i++)
       myFormattedNumber.appendText("0");
   }

我仍然非常有兴趣知道这是一个错误还是一个功能,但这似乎是对我的疏忽 .

2 回答

  • 1

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

    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))
    

    Full article here

  • 1

    Number(value).toFixed(2) 怎么样?

相关问题