简单Flash AS3计数器添加不必要的小数

时间:2014-02-22 15:03:57

标签: actionscript-3 flash

我正在为Flash创建一个简单的计数器应用程序(AS3)并将其剥离到最低限度,因为我遇到了一个非常简单但核心的问题。

舞台上有两个按钮,一个在按下时为变量添加1.9,另一个在按下时将1.9减去变量。然后有一个动态文本框,将变量的值显示为字符串。

我遇到的问题是,一旦计数器达到5.7的喊叫,它就会显示“5.69999999999”并且从那时开始持续,偶尔的数字是错误的。即“15.200000000001”等。

我的代码在下面,如果有人能够解决出错的问题,我将不胜感激。

var count:Number= 0;
counter.text = '0';

myBtn1.addEventListener(MouseEvent.CLICK, btnClick1);
myBtn2.addEventListener(MouseEvent.CLICK, btnClick2);

function btnClick1(event:MouseEvent):void
{
    addCount();
}

function btnClick2(event:MouseEvent):void
{

    takeCount();
}

function addCount():void
{
    count += 1.9;
    counter.text = count.toString();
}

function takeCount():void
{
    count -=1.9;
    counter.text = count.toString();
}

2 个答案:

答案 0 :(得分:1)

我复制了你的问题,找不到它的来源。但是,您可以使用简单的舍入系统来修复它,例如

var count:Number= 0;
counter.text = "0";

myBtn1.addEventListener(MouseEvent.CLICK, btnClick1);
myBtn2.addEventListener(MouseEvent.CLICK, btnClick2);

function btnClick1(event:MouseEvent):void
{
addCount();
}

function btnClick2(event:MouseEvent):void
{

takeCount();
}

function addCount():void
{
count += 1.9;
count=roundDecimal(count, 1)
counter.text = count.toString();
}

function takeCount():void
{
count -=1.9;
count=roundDecimal(count, 1)
counter.text = count.toString();
}

function roundDecimal(num:Number, precision:int):Number{

var decimal:Number = Math.pow(10, precision);

return Math.round(decimal* num) / decimal;

}

答案 1 :(得分:1)

不是将文本分配给count.toString(),而是可以使用toFixed()函数,它将返回固定小数精度文本。给它一个必要的十进制数字参数输出,你设置好了,没有任何Math.pow()技巧。

counter.text=count.toFixed(1);

The Number.toFixed() manual