0

可能的重复:
JavaScript 的数学被破坏了吗?
轮数问题 flex

我在使用 flex 4.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

问题源于浮点数只能表示所有实数的子集。因此,换句话说,对于浮点运算,结果是最接近用浮点数表示的正确结果的值。

如果您正在使用任何与金钱相关的系统,请不要使用浮点数。任何舍入误差很容易在多步计算中累积,这在处理金钱时非常糟糕。你应该只使用整数,那么这些舍入问题就不会发生——至少不会发生乘法。

我相信使用“。” 在 ActionScript 中Number生成一个浮点数。使用其中之一int或小心保留Number为整数。

于 2012-05-06T17:03:26.837 回答