[英]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.