为什么我的数字步进值在小数点后面这么远



我在我的应用程序中使用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。

最新更新