我对此代码有疑问:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
showStatusBar="false"
width="250" height="31">
<s:layout>
<s:HorizontalLayout gap="10" paddingBottom="10" paddingLeft="10" paddingRight="10"
paddingTop="10" verticalAlign="middle"/>
</s:layout>
<fx:Script>
<![CDATA[
[Bindable]
private var i:Number = 1.0;
private function click(e:MouseEvent):void
{
if (e.currentTarget == plus)
i += .1;
if (e.currentTarget == minus)
i -= .1;
}
]]>
</fx:Script>
<s:Button id="plus" width="30" label="+" click="click(event)"/>
<s:Button id="minus" width="30" label="-" click="click(event)"/>
<s:Label text="{i}"/>
当我点击'+'时,我得到了
1.1(好)
1.2000000000000002(而不是1.2)
1.3000000000000003(而不是1.3)
1.4000000000000004(而不是1.4)
1.5000000000000004(而不是1.5)
1.6000000000000005(而不是1.6)
1.7000000000000006(而不是1.7)
1.8000000000000007(而不是1.8)
1.9000000000000008(而不是1.9)
2.000000000000001(而不是2.0)
...
当我点击' - '时,我得到了
0.9(好)
0.8(好)
0.7000000000000001(而不是0.7)
0.6000000000000001(而不是0.6)
0.5000000000000001(而不是0.5)
0.40000000000000013(而不是0.4)
0.30000000000000016(而不是0.3)
0.20000000000000015(而不是0.2)
0.10000000000000014(而不是0.1)
1.3877787807814457e-16(而不是0.0)
...
我改变了我的功能
private function click(e:MouseEvent):void
{
if (e.currentTarget == plus)
i = Math.floor((i + 0.1) * 10) / 10;
if (e.currentTarget == minus)
i = Math.floor((i - 0.1) * 10) / 10;
}
当我点击“+”或仅点击“ - ”时,我得到正确的号码
但如果我点击“ - ”直到0.7和“+”,它会保持在0.7
当我点击' - '直到0.9时'+',它保持为0.8左右
为什么呢?如何将数字递增或递减0.1?
答案 0 :(得分:4)
尝试使用:
private function click(e:MouseEvent):void
{
if (e.currentTarget == plus)
i = Math.round((i + 0.1) * 10) / 10;
if (e.currentTarget == minus)
i = Math.round((i - 0.1) * 10) / 10;
}
或者在Flex 4.5的情况下:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
showStatusBar="false"
width="250" height="31">
<s:layout>
<s:HorizontalLayout gap="10" paddingBottom="10" paddingLeft="10" paddingRight="10"
paddingTop="10" verticalAlign="middle"/>
</s:layout>
<fx:Script>
<![CDATA[
[Bindable]
private var i:Number = 1.0;
private function click(e:MouseEvent):void
{
if (e.currentTarget == plus)
i += .1;
if (e.currentTarget == minus)
i -= .1;
}
]]>
</fx:Script>
<fx:Declarations>
<s:NumberFormatter id="numberFormatter" trailingZeros="true" fractionalDigits="1" />
</fx:Declarations><s:Button id="plus" width="30" label="+" click="click(event)"/>
<s:Button id="minus" width="30" label="-" click="click(event)"/>
<s:Label text="{numberFormatter.format(i)}"/>
</s:WindowedApplication>
或者在Flex 4的情况下:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
showStatusBar="false"
width="250" height="31">
<s:layout>
<s:HorizontalLayout gap="10" paddingBottom="10" paddingLeft="10" paddingRight="10"
paddingTop="10" verticalAlign="middle"/>
</s:layout>
<fx:Script>
<![CDATA[
[Bindable]
private var i:Number = 1.0;
private function click(e:MouseEvent):void
{
if (e.currentTarget == plus)
i += .1;
if (e.currentTarget == minus)
i -= .1;
}
]]>
</fx:Script>
<fx:Declarations>
<mx:NumberFormatter id="numberFormatter" precision="1" rounding="nearest" />
</fx:Declarations><s:Button id="plus" width="30" label="+" click="click(event)"/>
<s:Button id="minus" width="30" label="-" click="click(event)"/>
<s:Label text="{numberFormatter.format(i)}"/>
</s:WindowedApplication>
答案 1 :(得分:1)
检查一下: 您可以使用NumberFormatter来正确格式化您的数字,我不是100%确定但使用浮点增量会在小数点处产生一些问题。
<?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">
<s:layout>
<s:HorizontalLayout gap="10" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" verticalAlign="middle"/>
</s:layout>
<fx:Script>
<![CDATA[
[Bindable]
private var i:Number = 1.0;
private function click(e:MouseEvent):void
{
if (e.currentTarget == plus)
i += 0.1;
if (e.currentTarget == minus)
i -= 0.1;
}
]]>
</fx:Script>
<fx:Declarations>
<mx:NumberFormatter id="numFormatter" precision="2" rounding="nearest"/>
</fx:Declarations>
<s:Button id="plus" width="30" label="+" click="click(event)"/>
<s:Button id="minus" width="30" label="-" click="click(event)"/>
<s:Label text="{numFormatter.format(i)}"/>
</s:Application>