ActionScript - форматирование нуля с помощью NumberFormatter? - PullRequest
2 голосов
/ 02 марта 2011

я назначил свойства объекту 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

[РЕДАКТИРОВАТЬ] Я исправил эту проблему, вручную добавив десятичный разделитель локали с нужным номеромof fraalDigits, если отформатированное число равно 0:

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

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

Мне все еще очень интересно узнать, является ли это ошибкой или функцией, но мне это кажется упущением.

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Как насчет Number(value).toFixed(2)?

1 голос
/ 02 марта 2011

Это не сексуально, но это было похоже на то, что я использовал, когда столкнулся с похожей проблемой:

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

Полная статья здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...