我在我的应用程序中使用Flex 4.6 Spark数字步进器,当我输入。9时,它返回"0.9000000953674316"。我可以输入任何值。它正在为他们所有人做这件事。
如果我使用箭头按钮,它从0移动到1,它将值设置为"0.09999990463256836"。
更新:
所以要做更多的测试如果我从0开始,然后往下就是:
0
-0.1
-0.2
-0.30000000000000004
-0.4
如果我回到上面,它是:
-0.30000000000000004
-0.20000000000000004
-0.10000000000000003
-2.7755575615628914 e-17
南
这是我的格式化程序代码:
precision = 100;
public function formatNumericStepper(value:Number):String {
return String(int(value*precision)/precision);
}
注意:有时值会卡在-。7或。28。对于整数,它工作得很好,但对于小于1的数字,它就很糟糕了。或者我做错了什么。
在@DodgerThud的一些技巧和有用的指导下,以下似乎正在工作:
MXML:
<s:NumericStepper id="numericStepper" snapInterval="0" stepSize=".01"
valueFormatFunction="formatNumericStepper"
valueParseFunction="valueParseFunctionNew"/>
ACTIONSCRIPT: public var precision:int = 100;
public var fixedPosition:int = 2;
/**
* Format numeric stepper
* Trim down to 2 decimal places.
* */
public function formatNumericStepper(value:Number):String {
var out:String;
if (fixedPosition!=0) {
out = Number(value.toFixed(fixedPosition)).toString();
}
else {
out = String(int(value * precision) / precision);
}
return out;
}
public function valueParseFunction(value:String):Number {
var out:Number;
if (fixedPosition!=0) {
out = Number(Number(value).toFixed(fixedPosition));
}
else {
out = Number(value);
}
return out;
}
我认为它被卡住了,因为如果你有一个足够小的步长,说。1,然后你使用值*100/100进行舍入,你有时会舍入。因此,永远不会有足够大或足够小的步长来超过某个值。
else语句可能会被删除。我把它们保存在里面,所以如果可能的话,我可以用步长来得到小数点的位置作为计数器。
因此,如果步长为。1,则fixedPosition将为1。如果步长为0.01,则fixedPosition为2。如果是。001或。999那么固定的位置就是3。