繁体   English   中英

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

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

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

这是我的格式化程序代码:

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,然后使用value * 100/100进行四舍五入,则有时会四舍五入。 因此,这绝不是一个足够大或很小的步骤,无法超过某个特定值。

else语句可能会被删除。 我将它们保留在其中,以便可以动态地进行操作,可以使用步长来获取小数位作为计数器。

因此,如果步长为.1,则fixedPosition为1。如果步长为.01,则fixedPosition为2。如果.001或.999,则固定位置为3。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM