Flex3页面,NumericStepper Test.mxml文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="817" height="556">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function doTest():void {
this.textAreaId.text += this.NumberID.value +" : "+ this.NumberID.value*100 +"\n";
this.NumberID.value = this.NumberID.nextValue;
}
]]>
</mx:Script>
<mx:NumericStepper x="33" y="40" width="113" id="NumberID" minimum="0.01" stepSize="0.01" maximum="0.99"/>
<mx:Button x="33" y="103" label="Button" click="doTest()"/>
<mx:TextArea x="168" y="10" width="346" height="510" id="textAreaId"/>
</mx:Application>
这不是bug。使用Number类型时候进行高精度乘除运算后都会有溢出,大部分语言都有类似问题。
应该是计算精度的问题,即使你直接
trace(0.06+0.01)
输出的结果也会是0.06999999999999999
Number类型的数值,在乘和除 的时候都会有类似的问题。如果转换成String 需要处理一下再输出。
roundStr(this.NumberID.value*100);
[code="java"]
public static function round( nNumber:Number, nRoundToInterval:Number = 0.01 ):Number {
var roundNum:Number = Math.round( nNumber/nRoundToInterval )*nRoundToInterval;
var formart:String = nRoundToInterval.toString();
var dec:int = formart.length-formart.indexOf( '.' )-1;
return Number( roundNum.toFixed( dec ));
}
public static function roundStr( nNumber:Number, nRoundToInterval:Number = 0.01 ):String {
var roundNum:Number = MyUtil.round( nNumber, nRoundToInterval );
var formart:String = nRoundToInterval.toString();
var dec:int = formart.length-formart.indexOf( '.' )-1;
if ( roundNum==0 ) {
return '0';
} else {
return roundNum.toFixed( dec );
}
}
[/code]