ActionScript - 使用 NumberFormatter 格式化零?

发布于 2024-10-19 20:53:11 字数 852 浏览 2 评论 0原文

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

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

i've assigned properties to a NumberFormatter object so that formatted values contain a leading zero, trailing zeros and a 2 decimal places.

the formatting works unless the number being formatted is 0. how can i format a 0 with the set properties so that 0 becomes 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]
i've remedied this problem by manually appending the locale decimal separator with the desired number of fractionalDigits if the formatted number is 0:

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

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

i'm still very interested in knowing if this is a bug or a feature, but it seems like a oversight to me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爺獨霸怡葒院 2024-10-26 20:53:11

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

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

完整文章在这里

It's not sexy, but this was similar to what I used when I ran into a similar issue:

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

寒尘 2024-10-26 20:53:11

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

How about Number(value).toFixed(2) ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文