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

时间:2015-08-31 06:03:39

标签: actionscript-3 flex flex4

我在我的应用程序中使用Flex 4.6 Spark Numeric Stepper,当我输入.9时,它返回," 0.9000000953674316"。我可以实际输入任何值。它正在为所有人做这件事。

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

更新
所以运行更多的测试。如果我开始并归零,那么就去吧:

0
-0.1
-0.2
-0.30000000000000004
-0.4

然后如果我再回过头来:

-0.30000000000000004
-0.20000000000000004
-0.10000000000000003
-2.7755575615628914e-17
NaN

这是我的格式化代码:

precision = 100;
public function formatNumericStepper(value:Number):String {
    return String(int(value*precision)/precision);
}

注意:有时值会停留在-.7或.28。它对于整数而言效果很好,但是它的数字小于1时就会出错。或者我做错了什么。

1 个答案:

答案 0 :(得分:0)

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