3

ここで説明されているように OS の小数点記号を変更した後: ( http://blogmines.com/blog/2010/03/11/how-to-change-the-decimal-separator-in-excel-2010/ )、私はしたい桁区切り記号と小数点記号の両方にコンマを使用する Flex の数値を表示します。簡単に聞こえますよね?

Flex が提供する 3 つの異なる NumberFormatters を使用してみました。途中で、変数を宣言するときに完全修飾クラスパスを使用したとしても、それらのうちの 2 つが同じクラスの他のものとうまく動作しないことがわかったので、次のように 3 つのクラスに分割する必要がありました。

NF1 - spark.formatters.NumberFormatter

package dstrube
{
    import flash.globalization.NumberParseResult;
    import spark.formatters.NumberFormatter;
    public class NF1
    {
        public static function get(value:String):String{
            var nf1:NumberFormatter = new NumberFormatter();
            var result:NumberParseResult = nf1.parse(value);
            return nf1.format(result.value);
        }
    }
}

NF2 - flash.globalization.NumberFormatter

package dstrube
{
    import flash.globalization.NumberParseResult;
import flash.globalization.NumberFormatter;
    public class NF2
    {
        public static function get(value:String):String{
            var nf2:NumberFormatter = new NumberFormatter("");// LocaleID.DEFAULT = same outcome as without
            nf2.fractionalDigits = 2; //= same outcome as without
            nf2.trailingZeros = true;
            var result:NumberParseResult = nf2.parse(value);
            //nf2.parseNumber(value); = NaN
            return nf2.formatNumber(result.value)
        }
    }
}

NF3 - mx.formatters.NumberFormatter (非推奨)

package dstrube
{
    //import mx.formatters.NumberBaseRoundType;
    import mx.formatters.NumberFormatter;
    public class NF3
    {
    public static function get(value:String):String{
        var nf3:NumberFormatter = new NumberFormatter();
        //nf3.rounding = NumberBaseRoundType.NEAREST; //no effect in this case
        return nf3.format(value);
    }
}

}

そして最後にメイン

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="init()"
               >
    <fx:Script>
        <![CDATA[
            import dstrube.NF1;
            import dstrube.NF2;
            import dstrube.NF3;
            [Bindable]
            public var s:String = "";
            protected  function init():void{
                var value:String = "5558049.90360013";
                s = "spark.formatters.NumberFormatter = " + NF1.get(value); //5,558,049.90
                s += "\n flash.globalization.NumberFormatter = " + NF2.get(value);//5,558,049,00
                s += "\n mx.formatters.NumberFormatter = " + NF3.get(value); //5,558,049.90360013
            }
        ]]>
    </fx:Script>
        <s:TextArea id="textArea" text="{s}" width="100%" height="100%" />
</s:Application>

3 つの NumberFormatters の中で最も賢いのは flash.globalization.NumberFormatter で、小数点の記号を認識しますが、丸めが正しくなく、5,558,049,90 ではなく 5,558,049,00 が表示されます。

何か案は?

4

2 に答える 2

6

次のいずれかを実行できます。

  • フォーマッタのプロパティを明示的に設定すると、必要な出力が得られます。
  • デフォルトのロケールを使用するようにフォーマッタを設定します。

            [Bindable] protected var formatted:String;
    
            protected function init(event:FlexEvent):void
            {
                var formatter:NumberFormatter = new NumberFormatter();
    
                // Option 1 set explicitly
                formatter.decimalSeparator = ",";
                formatter.fractionalDigits = 2;
                formatter.trailingZeros = true;
    
                // Option 2 set default locale to be the locale
                formatter.setStyle("locale", LocaleID.DEFAULT);
    
                formatted = formatter.format("5558049.90360013");
            }
    
        ]]>
    </fx:Script>
    
    <s:Label text="{formatted}" />
    

出力は「5,558,049,90」です。

于 2013-01-14T22:01:22.800 に答える
1

この方法では、OSの設定で設定されている小数点記号がすべて表示されます。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               initialize="init(event)">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import spark.formatters.NumberFormatter;
            import flash.globalization.NumberFormatter;

            [Bindable] protected var formatted:String;

            protected function init(event:FlexEvent):void
            {
                var formatter:spark.formatters.NumberFormatter = new spark.formatters.NumberFormatter();
                var nf2:flash.globalization.NumberFormatter = new flash.globalization.NumberFormatter("");

                formatter.decimalSeparator = nf2.decimalSeparator;
                formatter.fractionalDigits = 2;
                formatter.trailingZeros = true;

                formatted = formatter.format("5558049.90360013");
            }

        ]]>
    </fx:Script>

    <s:Label text="{formatted}" />
</s:Application>
于 2013-01-15T15:52:09.290 に答える