我正在为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();
}
答案 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);