Apache flex 带spark.formatters.NumberFormatter的分隔符后不超过9位?

Apache flex 带spark.formatters.NumberFormatter的分隔符后不超过9位?,apache-flex,flex4,Apache Flex,Flex4,我必须在Flex AdvancedDataGrid中显示非常小的值(电容器) 我使用spark.formatters.NumberFormatter。 如果我使用3、6或9来表示分数git,那么一切都很好 但是如果我使用12,因为我需要小数点分隔符后面的12位数字,那么该值在9位之后被截断 有没有办法在分隔符后获得超过9位的数字 或者有没有一种方法可以使用类似“4.7 E-12”(必须是E-9、E-12、E-15等)的格式设置?我创建了一个允许您指定如何使用所需符号或结构格式化字符串/数字的格式

我必须在Flex AdvancedDataGrid中显示非常小的值(电容器) 我使用spark.formatters.NumberFormatter。 如果我使用3、6或9来表示分数git,那么一切都很好

但是如果我使用12,因为我需要小数点分隔符后面的12位数字,那么该值在9位之后被截断

有没有办法在分隔符后获得超过9位的数字

或者有没有一种方法可以使用类似“4.7 E-12”(必须是E-9、E-12、E-15等)的格式设置?

我创建了一个允许您指定如何使用所需符号或结构格式化字符串/数字的格式设置。根据您的要求,这可能会对您有所帮助。可以根据需要修改这个类

CustomPatternFormatter.as

package
{
    import mx.formatters.Formatter;

    public class CustomPatternFormatter extends Formatter
    {
        private static const VALID_PATTERN_CHARACTERS:String = "#,.-";

        // Use # as a placeholder for a regular
        // character in the input string.
        // Then add other characters between the
        // # symbol for the desired output format.
        // ex. The pattern ##,##,##.## with input 12345678
        // will output 12,34,56.78
        public var formatPattern:String;

        // If True, the input string must match the number
        // of # characters in the formatPattern.
        public var inputMustMatchPatternLength:Boolean;

        //Constructor
        public function CustomPatternFormatter()
        {
            super();
            formatPattern = "";
            inputMustMatchPatternLength = false;
        }

        // Override format().
        override public function format(value:Object):String
        {
            // Reset error if it exists.
            if (error)
                error = null;

            // If value is null, or empty String just return ""
            // but treat it as an error for consistency.
            // Users will ignore it anyway.
            if (!value || (value is String && value == ""))
            {
                error = "Cannot convert an empty value";
                return "";
            }

            // Check to see if the input value must match the format pattern
            if (inputMustMatchPatternLength && String(value).length != countOccurrences(formatPattern, "#"))
            {
                error = "The input value length does not match the format pattern length.";
                return "";
            }

            // If the value is valid, format the string.
            var fStrLen:int = 0;
            var letter:String;
            var n:int;
            var i:int;
            var v:int;

            // Make sure the formatString is valid.
            n = formatPattern.length;
            for (i = 0; i < n; i++)
            {
                letter = formatPattern.charAt(i);
                if (letter == "#")
                {
                    fStrLen++;
                }
                else if (VALID_PATTERN_CHARACTERS.indexOf(letter) == -1)
                {
                    error = "You can only use the following symbols in the formatPattern: " + VALID_PATTERN_CHARACTERS;
                    return "";
                }
            }

            var returnString:String = "";
            var vStr:String = String(value).replace(".", "").split("").reverse().join("");
            var fArr:Array = formatPattern.split("").reverse();
            var fChar:String;

            // Format the string
            for (v = 0; v < vStr.length; v++)            {                   if (fArr.length > 0)
                {
                    do
                    {
                        fChar = fArr.shift();

                        if (fChar != "#")
                            returnString += fChar;

                    } while (fChar != "#" && fArr.length > 0);
                }

                returnString += vStr.charAt(v);
            }

            // Return the formatted string
            return returnString.split("").reverse().join("");
        }

        protected function countOccurrences(str:String, char:String):int
        {
            var count:int = 0;
            for (var i:int=0; i < str.length; i++)
            {
                if (str.charAt(i) == char)
                {
                    count++;
                }
            }
            return count;
        }
    }
}
包
{
导入mx.formatters.Formatter;
公共类CustomPatternFormatter扩展格式化程序
{
私有静态常量有效_模式_字符:String=“#,.-”;
//将#用作常规的占位符
//输入字符串中的字符。
//然后在
//#所需输出格式的符号。
//例如,输入12345678的模式###,##,##,###
//将输出12,34,56.78
公共var格式模式:字符串;
//如果为True,则输入字符串必须与数字匹配
//格式化模式中的#个字符。
公共变量inputMustMatchPatternLength:布尔值;
//建造师
公共函数CustomPatternFormatter()
{
超级();
formatPattern=“”;
inputMustMatchPatternLength=false;
}
//重写格式()。
重写公共函数格式(值:对象):字符串
{
//重置错误(如果存在)。
如果(错误)
错误=null;
//如果值为null或空字符串,则只返回“”
//但将其视为一致性的错误。
//用户无论如何都会忽略它。
如果(!value | |)(值为字符串&&value==“”)
{
error=“无法转换空值”;
返回“”;
}
//检查输入值是否必须与格式模式匹配
if(inputMustMatchPatternLength&&String(value).length!=CountOccurrencess(formatPattern,“#”))
{
error=“输入值长度与格式模式长度不匹配。”;
返回“”;
}
//如果值有效,请格式化字符串。
var fStrLen:int=0;
var字母:字符串;
var n:int;
变量i:int;
变量v:int;
//确保formatString有效。
n=formattern.length;
对于(i=0;i0)
{
做
{
fChar=fArr.shift();
如果(fChar!=“#”)
returnString+=fChar;
}而(fChar!=“#”和&fArr.length>0);
}
returnString+=vStr.charAt(v);
}
//返回格式化的字符串
返回returnString.split(“”).reverse().join(“”);
}
受保护的函数countoccurrents(str:String,char:String):int
{
变量计数:int=0;
对于(变量i:int=0;i
我创建了一个允许您指定如何使用所需的符号或结构格式化字符串/数字的程序。根据您的要求,这可能会对您有所帮助。可以根据需要修改这个类

CustomPatternFormatter.as

package
{
    import mx.formatters.Formatter;

    public class CustomPatternFormatter extends Formatter
    {
        private static const VALID_PATTERN_CHARACTERS:String = "#,.-";

        // Use # as a placeholder for a regular
        // character in the input string.
        // Then add other characters between the
        // # symbol for the desired output format.
        // ex. The pattern ##,##,##.## with input 12345678
        // will output 12,34,56.78
        public var formatPattern:String;

        // If True, the input string must match the number
        // of # characters in the formatPattern.
        public var inputMustMatchPatternLength:Boolean;

        //Constructor
        public function CustomPatternFormatter()
        {
            super();
            formatPattern = "";
            inputMustMatchPatternLength = false;
        }

        // Override format().
        override public function format(value:Object):String
        {
            // Reset error if it exists.
            if (error)
                error = null;

            // If value is null, or empty String just return ""
            // but treat it as an error for consistency.
            // Users will ignore it anyway.
            if (!value || (value is String && value == ""))
            {
                error = "Cannot convert an empty value";
                return "";
            }

            // Check to see if the input value must match the format pattern
            if (inputMustMatchPatternLength && String(value).length != countOccurrences(formatPattern, "#"))
            {
                error = "The input value length does not match the format pattern length.";
                return "";
            }

            // If the value is valid, format the string.
            var fStrLen:int = 0;
            var letter:String;
            var n:int;
            var i:int;
            var v:int;

            // Make sure the formatString is valid.
            n = formatPattern.length;
            for (i = 0; i < n; i++)
            {
                letter = formatPattern.charAt(i);
                if (letter == "#")
                {
                    fStrLen++;
                }
                else if (VALID_PATTERN_CHARACTERS.indexOf(letter) == -1)
                {
                    error = "You can only use the following symbols in the formatPattern: " + VALID_PATTERN_CHARACTERS;
                    return "";
                }
            }

            var returnString:String = "";
            var vStr:String = String(value).replace(".", "").split("").reverse().join("");
            var fArr:Array = formatPattern.split("").reverse();
            var fChar:String;

            // Format the string
            for (v = 0; v < vStr.length; v++)            {                   if (fArr.length > 0)
                {
                    do
                    {
                        fChar = fArr.shift();

                        if (fChar != "#")
                            returnString += fChar;

                    } while (fChar != "#" && fArr.length > 0);
                }

                returnString += vStr.charAt(v);
            }

            // Return the formatted string
            return returnString.split("").reverse().join("");
        }

        protected function countOccurrences(str:String, char:String):int
        {
            var count:int = 0;
            for (var i:int=0; i < str.length; i++)
            {
                if (str.charAt(i) == char)
                {
                    count++;
                }
            }
            return count;
        }
    }
}
包
{
导入mx.formatters.Formatter;
公共类CustomPatternFormatter扩展格式化程序
{
私有静态常量有效_模式_字符:String=“#,.-”;
//将#用作常规的占位符
//输入字符串中的字符。
//然后在
//#所需输出格式的符号。
//例如,输入12345678的模式###,##,##,###
//将输出12,34,56.78
公共var格式模式:字符串;
//如果为True,则输入字符串必须与数字匹配
//格式化模式中的#个字符。
公共变量inputMustMatchPatternLength:布尔值;
//建造师
公共函数CustomPatternFormatter()
{
超级();
formatPattern=“”;
inputMustMatchPatternLength=false;
}
//重写格式()。
重写公共函数格式(值:对象):字符串
{
//重置错误(如果存在)。
如果(错误)
错误=null;
//如果值为null或空字符串,则只返回“”
//但将其视为一致性的错误。
//用户无论如何都会忽略它。
如果(!value | |)(值i