Actionscript 逗号格式的数字

Actionscript 逗号格式的数字,actionscript,actionscript-2,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 这需要适用于带十进制值或不带十进制值的数字 i、 e.1234567.80和1234567 这适用于Coldfusion/Flash应用程序中的Actionscript 2,因此使用的是普通的Actionscript。我在网上看到了

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

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
这需要适用于带十进制值或不带十进制值的数字 i、 e.1234567.80和1234567

这适用于Coldfusion/Flash应用程序中的Actionscript 2,因此使用的是普通的Actionscript。我在网上看到了一些解决方案,但没有一个能完全解决问题

到目前为止,我有下面的函数,但在提供小数时格式不正确。例如:21898.5变为2188,8.5

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


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

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);
跟踪:1000000.999777

您可以尝试以下方法:

_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”),并使用递归,因此在拆分元素上调用自身

对于您的示例编号,此跟踪:

1,234
1,234.50
12,345.60
123,456.70
1,234,567.80
只是为了好玩 这就是您的原始代码无法工作的原因:

  • 创建数字的字符串表示形式(
    var numString:string=theNumber.toString();
    )后,您继续使用实际数字,而不是字符串版本
  • 将值分配给数字部件后,继续对
    numString
    执行操作,而不是
    numberPart
  • 更正后的版本如下所示:

    _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;
    }
    
    公共静态函数formatNumberString(值:Number,分隔符:String):String{
    var结果:String=“”;
    var digitsCount:Number=value.toString().length;
    分隔符=分隔符| |“,”;
    对于(变量i:Number=0;i
    Hi-谢谢,但这甚至不能编译。你确定它是AS2兼容的吗?在AS2中不提供RegExp类,这只是AS3。谢谢-不幸的是,它也不编译。它在CS4/AS2/FP8中对我来说运行良好。你能提供一些关于你的设置和你收到的编译错误的详细信息吗?@checkey-我已经修改为使用你喜欢的声明风格。这还需要更改递归函数调用的名称,您可能已经错过了。谢谢-我已经尝试了一次又一次,但仍然存在错误。我正在运行一个使用cfform的Coldfusion 9页面,该页面使用flash,可以使用actionscript2进行操作。因此,当出现编译错误时,我没有得到任何信息,只是它没有显示表单。我能够通过注释确定问题行:
    \u global.NumberFormat=function(numString:String):String
    必须是
    \u global.NumberFormat=function(numString)
    ,否则它不会编译。另外,行
    返回NumberFormat(splitByDecimal[0])+“+splitByDecimal[1]
    出错,可能是因为我必须按照我在上一篇评论中详述的方式更改函数声明,以使函数正常工作。
    _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;
    }
    
    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;
    }