Не более 9 цифр после разделителя с помощью spark.formatters.NumberFormatter? - PullRequest
1 голос
/ 13 июля 2011

Я должен отображать очень маленькие значения (конденсатор) в Flex-AdvancedDataGrid Я использую spark.formatters.NumberFormatter. Если я использую 3, 6 или 9 для дробных цифр, все в порядке.

Но если я использую 12, потому что мне нужно 12 цифр после десятичного разделителя, тогда значение будет сокращено после 9 цифр!

Есть ли способ получить более 9 цифр после разделителя.

Или есть способ использовать форматирование, например "4.7 E-12" (должно быть E-9, E-12, E-15 и т. Д.)

Ответы [ 2 ]

1 голос
/ 18 июля 2011

toPrecision и toFixed отлично работает до 20 цифр. Достаточно. Я напишу функцию на этой основе, чтобы получить результаты, такие как 4.7 E-12.

Спасибо за помощь Jan

0 голосов
/ 14 июля 2011

Я создал пользовательский класс форматера шаблонов , который позволяет вам указать, как вы хотите, чтобы строка / число форматировались с использованием любых символов или структуры, которые вы хотите. В зависимости от ваших требований это может вам помочь. Не стесняйтесь изменять этот класс по мере необходимости.

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...