为什么我的数字步进值远远超过小数点?

Why are my numeric stepper values so far out past the decimal point?

我在我的应用程序中使用 Flex 4.6 Spark 数字步进器,当我输入 .9 时 returns,“0.9000000953674316”。我实际上可以输入任何值。它正在为他们所有人做这件事。

如果我使用箭头按钮,它会从 0 移动到 1,它会将值设置为“0.09999990463256836”。

更新:
所以 运行 更多测试。如果我开始并归零然后下降它是:

0
-0.1
-0.2
-0.30000000000000004
-0.4

如果我再返回它是:

-0.30000000000000004
-0.20000000000000004
-0.10000000000000003
-2.7755575615628914e-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"/>

动作脚本:

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。如果步长为 .01,则 fixedPosition 将为 2。如果为 .001 或 .999,则固定位置将为 3。