0

重複の可能性:
JavaScriptの数学は壊れていますか?
丸め数問題フレックス

flex4.5に問題があります。15.2 * 6を掛けたいのですが、91.2を取得する代わりに、91.1999999999999を取得しています。これが私のコードです。非常にシンプルで、すべてのバリエーションを試しました。助けてくれてありがとう。ただし、請求プロセスを使用しているため、フォーマッターは使用しません。必要はありません。つまり、非常に簡単な操作です。

<?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">
<fx:Script>
    <![CDATA[
        public var precio:Number = new Number();
        public var cantidad:Number=new Number();
        public var resultado:Number=new Number();
        [Bindable]
        public var numeroToString:String=new String();
        public var numeroToString2:String=new String();
        //public var numerox:num


        protected function button1_clickHandler(event:MouseEvent):void
        {
            precio=parseFloat(precioTxt.text);
            cantidad=parseInt(cantidadTxt.text);
            resultado=precio*cantidad;
            resLabel.text=resultado.toString();

        }

    ]]>
</fx:Script>
<fx:Declarations>
<mx:NumberFormatter id="formateo"
                    rounding="up"
                    precision="3"
                    />  <!-- Place non-visual       elements (e.g., services, value objects) here -->
</fx:Declarations>

<s:TextInput id="cantidadTxt" x="136" y="77" prompt="introduce cantidad"/>
<s:TextInput id="precioTxt" x="136" y="107" prompt="introduce precio"/>
<s:Button x="176" y="155" label="calcular" click="button1_clickHandler(event)"/>
<s:Label id="resLabel" x="304" y="77" fontSize="20"/>
</s:Application>
4

1 に答える 1

2

この問題は、浮動小数点数がすべての実数のサブセットしか表現できないという事実から生じます。したがって、言い換えると、浮動小数点演算では、結果は float で表現可能な正しい結果に最も近い値になります。

お金に関連するシステムを使用している場合は、浮動小数点数を使用しないでください。丸め誤差は、多段階の計算で簡単に蓄積されます。これは、お金を扱うときに非常に悪いことです。整数のみを使用する必要があります。そうすれば、これらの丸めの問題は発生しません-少なくとも乗算では発生しません。

「。」を使用していると思います。ActionScript ではNumber、浮動小数点数を作成します。どちらかを使用するか、整数としてint保持するように注意してください。Number

于 2012-05-06T17:03:26.837 に答える