数字步进小数的奇怪行为

时间:2011-04-11 23:32:06

标签: flex actionscript-3 numbers decimal numericupdown

我正在为一个带数字的字段编辑。我尝试了一个文本字段,但由于它是一个Number数据类型,它不顺利 - 尽管将字符串重新编号为数字等...它一直给我NaN作为值。所以我决定最好使用数字步进器。

当我最初加载它时,它会丢弃所有小数,只显示我的数字作为整数。我将stepIncrement更改为0.1,现在它确实显示了小数(一个奇怪的要求imo)..但是当我升级它偶尔给我一个像'17 .700000000000003'的值,当我期望17.7。我的数据中的所有数字都有一个小数位。我知道我可以写一个dataformatter,但在这种情况下似乎没有必要。

还有其他方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:7)

你偶然发现了尝试用浮点二进制格式表示十进制数的妥协,例如IEEE 754.不是所有十进制数都可以精确表示。你可以在这里详细阅读这个问题:

http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding

您可以使用 Number.toFixed(fractionDigits:uint)显示任意数量的小数位。

答案 1 :(得分:0)

您可以使用valueFormatFunction,它接受数值并将其格式化为字符串。您需要在数字步进器上设置显式宽度,以使它们适合。

答案 2 :(得分:0)

您的MXML中的

<s:NumericStepper  valueFormatFunction="stepperFormatter"/>
你脚本中的

protected function stepperFormatter(newValue:Number):String
{
    return Math.ceil(newValue).toString()
}