2011-03-02 59 views
2

我已經將屬性分配給NumberFormatter對象,以便格式化的值包含前導零,尾隨零和2位小數。ActionScript - 使用NumberFormatter格式化零?

格式化工作,除非被格式化的數字是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 

[編輯] 我已經通過用的fractionalDigits所需數量的手動附加的區域設置小數分隔如果格式化數爲0補救此問題:

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

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

我對於知道這是一個錯誤還是一個特性,我仍然很感興趣,但對我來說這似乎是一個疏忽。

回答

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

該代碼是可怕的。大聲笑。如果返回的字符串爲零,那麼簡單地追加「.00」也可以。似乎這是NumberFormatter類中的錯誤。如果傳遞給格式化程序的值爲0,formatNumber(),formatInt()和formatUint()全都返回「0」,不需要格式。 – TheDarkIn1978 2011-03-02 07:28:50

+0

哈哈是的,絕對不是性感。它用於貨幣格式化,特別是非美國。 – TNC 2011-03-02 07:32:03

+0

如果更改某些設置,追加'.00'並不總是您想要的。另外,0在Flash Player 11中返回0.00,所以也許你不必做任何事情。 – 2011-03-02 07:36:43

1

如何Number(value).toFixed(2)

+0

使用NumberFormatter不是微不足道的。數字格式化爲特定的區域設置。例如,在北美,使用具有上述屬性的NumberFormatter的數字5000被轉換爲「5,000.00」,而在歐洲可能是「5.000,00」(請注意分隔符)。 – TheDarkIn1978 2011-03-02 07:26:06