【问题标题】:ActionScript - Formatting Zero With NumberFormatter?ActionScript - 使用 NumberFormatter 格式化零?
【发布时间】:2011-07-07 01:02:33
【问题描述】:

我已将属性分配给 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");
   }

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

【问题讨论】:

    标签: actionscript-3 format number-formatting zero


    【解决方案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

    【讨论】:

    • 那个代码太可怕了。哈哈。如果返回的字符串为零,则在返回的字符串上简单地附加“.00”可能也是一样的。这似乎是 NumberFormatter 类中的错误。如果传递给格式化程序的值为 0,则 formatNumber()、formatInt() 和 formatUint() 都返回“0”而没有所需的格式。
    • 哈哈是的,绝对不性感。它用于货币格式化,尤其是非美国货币。
    • 如果您更改某些设置,附加 '.00' 并不总是符合您的要求。此外,在 Flash Player 11 中,0 返回 0.00,因此您可能无需执行任何操作。
    • if(numberString.text == "0")numberString.appendText(".00"); ?另外,您能解释一下有关 Flash Player 11 的更多信息吗?有链接吗?
    【解决方案2】:

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

    【讨论】:

    • 使用 NumberFormatter 并非易事。数字被格式化为特定的语言环境。例如,在北美,数字 5000 使用具有上述属性的 NumberFormatter 被转换为“5,000.00”,而在欧洲它可能是“5.000,00”(注意分隔符)。
    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2020-11-07
    相关资源
    最近更新 更多