逗号格式化数字

时间:2011-11-14 11:22:49

标签: actionscript actionscript-2

我需要使用逗号格式化数字作为千位分隔符,例如:

1234 = 1,234
1234.50 = 1,234.50
12345.60 = 12,345.60
123456.70 = 123,456.70
1234567.80 = 1,234,567.80
etc etc

这需要适用于带小数值或不带小数值的数字 即1234567.80和1234567

这适用于Coldfusion / Flash应用程序中的Actionscript 2,因此正在使用正常的actionscript。我在网上看到了几个解决方案,但没有一个完全可以解决问题。

到目前为止,我有下面的函数,但是在提供小数时它没有正确格式化。例如:21898.5变为2,188,8.5。

请您帮我找到错误或提供满足要求的替代解决方案。 感谢

_global.NumberFormat = function(theNumber)
        {
            var myArray:Array;
            var numberPart:String;
            var decPart:String;
            var result:String = '';
            var numString:String = theNumber.toString();

            if(theNumber.indexOf('.') > 0)
            {
                myArray = theNumber.split('.');
                numberPart = myArray[0];
                decPart = myArray[1];
            }
            else
            {
                numberPart = numString;
            }

            while (numString.length > 3)
            {
                var chunk:String = numString.substr(-3);
                numString = numString.substr(0, numString.length - 3);
                result = ',' + chunk + result;
            }   
            if (numString.length > 0)
            {
                    result = numString + result;
            }   

            if(theNumber.indexOf('.') > 0)
            {
                result = result + '.' + decPart;
            }


            //alert('Result: ' + result);

            return result;
        }

3 个答案:

答案 0 :(得分:3)

你可以试试这个:

_global.NumberFormat = function(numString)
{
    numString = String(numString);
    var index:Number = numString.indexOf('.');
    var decimal:String;
    if(index > 0) {
        var splitByDecimal:Array = numString.split(".");
        //return NumberFormat(splitByDecimal[0])+"."+splitByDecimal[1];
        numString = splitByDecimal[0];
        decimal = splitByDecimal[1];
    } else if(index === 0) {
        return "0"+numString;
    }
    var result:String = '';
    while (numString.length > 3 ) {
        var chunk:String = numString.substr(-3);
        numString = numString.substr(0, numString.length - 3);
        result = ',' + chunk + result;
    }
    result = numString + result;
    if(decimal) result = result + "." + decimal;
    return result;
}

如果存在则将数字除以小数(如果需要,则补偿非法'.01234'),并使用递归,因此在split元素上调用自身。

对于您的示例数字,此跟踪:

1,234
1,234.50
12,345.60
123,456.70
1,234,567.80

只是为了好玩

这就是原始代码不起作用的原因:

  1. 在创建数字(var numString:String = theNumber.toString();)的字符串表示后,您继续使用实际数字而不是字符串版本。
  2. 在为数字部分分配值后,您继续在numString而不是numberPart上执行操作。
  3. 更正后的版本如下所示:

    _global.NumberFormat = function(theNumber)
    {
        var myArray:Array;
        var numberPart:String;
        var decPart:String;
        var result:String = '';
        var numString:String = theNumber.toString();
    
        if(numString.indexOf('.') > 0)
        {
            myArray = numString.split('.');
            numberPart = myArray[0];
            decPart = myArray[1];
        }
        else
        {
            numberPart = numString;
        }
    
        while (numberPart.length > 3)
        {
            var chunk:String = numberPart.substr(-3);
            numberPart = numberPart.substr(0, numberPart.length - 3);
            result = ',' + chunk + result;
        }   
        if (numberPart.length > 0)
        {
            result = numberPart + result;
        }   
    
        if(numString.indexOf('.') > 0)
        {
            result = result + '.' + decPart;
        }
    
    
        //alert('Result: ' + result);
    
        return result;
    }
    

答案 1 :(得分:0)

public static function formatNumberString(value:Number,separator:String):String {
var result:String = "";
var digitsCount:Number = value.toString().length;

separator = separator || ",";

for (var i:Number = 0; i < digitsCount; i++) {
  if ((digitsCount - i) % 3 == 0 && i != 0) {
    result += separator;
  }
    result += value.toString().charAt(i);
  }
  return result;
}

答案 2 :(得分:-1)

试试这个,对我来说很好用:

var largeNumber:String=new String(1000000.999777);
var fAr:Array=largeNumber.split(".");
var reg:RegExp=/\d{1,3}(?=(\d{3})+(?!\d))/;

while(reg.test(fAr[0]))
fAr[0]=fAr[0].replace(reg,"$&,");
var res:String=fAr.join(".");
trace(res);

追踪:1,000,000.999777