2016-12-02 53 views
0

我需要幫助。我想製作一個數字四捨五入的按鈕,小數點後面的小數點,例如1.2345到1.234到1.23等。我不想使用Math.round,因爲它會輪到一個整數,我不知道我是否可以使用* 10/10,* 100/100等等,因爲我在答案中得到了不同的小數。點擊btnEquals後,此按鈕將不得不在計算器上工作,只是回答問題。as3 - 按十進制整數十進制數的按鈕

我還需要幫助將addEventListener用於「List」組件中的標籤。

+1

所以每次單擊該按鈕時,你希望它圓多一個地方? –

+1

同時檢查'yourNumber.toPrecision(x);'是否做你想要的......其中'x'是小數點後所需數字的數量。 –

+1

@NealDavis是的,這就是我的意思 –

回答

2

我不知道如果我很好理解的問題,但在你的情況我會做這樣的事情:

var myVal:Number = 1.2345 
var vectorFloorResult:Vector.<Number>; 
var vectorRoundResult:Vector.<Number>; 
var decimals2String:String = myVal.toString(); 
var firstDecimal:uint = (decimals2String.lastIndexOf(".")+1); 
var lastDecimal:uint = decimals2String.length; 
var decimals: uint = (lastDecimal-firstDecimal) 

var decimalsMultiply:uint = Math.pow(10,decimals); 


trace ("decimals = " + decimalsMultiply) 
// output : decimals = 4 

function decreseDecimals():void{ 
    vectorFloorResult = new Vector.<Number>() 
    vectorRoundResult = new Vector.<Number>() 
    for (var i:uint = decimalsMultiply; i>=10; i/=10){ 
     vectorFloorResult.push(Math.floor(myVal*i)/i) 
     vectorRoundResult.push(Math.round(myVal*i)/i) 
    } 

} 

decreseDecimals(); 

trace("floor result = " + vectorFloorResult); 
trace("round result = " + vectorRoundResult); 

輸出:

decimals = 10000 

對於數學計算。地板:

floor result = 1.2345,1.234,1.23,1.2 

對於Math.round:

round result = 1.2345,1.235,1.23,1.2 

您可以更改代碼,當你點擊一個按鈕就可以得到結果......

很抱歉,但我的英語實在是太差了! 所以這可能是一個錯誤的答案。 :(

TL; DR;更多信息的,但它很無聊

如果你想使用一個固定的向量長度,你可以將功能更改爲:

function decreseDecimals():void{ 
    var count:uint = 0 
    trace(lastDecimal) 
    vectorFloorResult = new Vector.<Number>(decimals,true) 
    vectorRoundResult = new Vector.<Number>(decimals,true) 
    for (var i:uint = decimalsMultiply; i>=10; i/=10){ 
     vectorFloorResult[count]=(Math.floor(myVal*i)/i) 
     vectorRoundResult[count]=(Math.round(myVal*i)/i) 
     count++ 
    } 

} 

那如果一定更好!您關於 「表演」 的事情......

真的太長,DR;)

[編輯]

要更新文本字段或結果的另一個組件,你可以這樣做:

import flash.text.TextField; 
import flash.display.SimpleButton; 
import flash.events.MouseEvent; 

var myVal:Number = 1.2345; 
var vectorFloorResult:Vector.<Number > ; 
var vectorRoundResult:Vector.<Number > ; 
var decimals2String:String = myVal.toString(); 
var firstDecimal:uint = (decimals2String.lastIndexOf(".")+1); 
var lastDecimal:uint = decimals2String.length; 
var decimals:uint = (lastDecimal - firstDecimal); 
var myCustomButton:SimpleButton = myCustomButton; 
var myDisplayRound:TextField = new TextField(); 
myDisplayRound.x = 100; 
myDisplayRound.y = 50; 
myDisplayRound.text = myVal.toString(); 
addChild(myDisplayRound); 

var myDisplayFloor:TextField = new TextField(); 
myDisplayFloor.x = 100; 
myDisplayFloor.y = 100; 
myDisplayFloor.text = myVal.toString(); 
addChild(myDisplayFloor); 
    var countClicks:uint = 1; 
var decimalsMultiply:uint = Math.pow(10,decimals); 
function decreseDecimals():void { 
    var count:uint = 0; 
    vectorFloorResult = new Vector.<Number > (decimals,true); 
    vectorRoundResult = new Vector.<Number > (decimals,true); 
    for (var i:uint = decimalsMultiply; i>=10; i/=10) 
    { 
     vectorFloorResult[count]=(Math.floor(myVal*i)/i); 
     vectorRoundResult[count]=(Math.round(myVal*i)/i); 
     count++; 
    } 
} 
decreseDecimals(); 
myCustomButton.addEventListener(MouseEvent.MOUSE_DOWN,changeDisplay); 
function changeDisplay(me:MouseEvent):void { 
    myDisplayRound.text = vectorRoundResult[countClicks].toString(); 
    myDisplayFloor.text = vectorFloorResult[countClicks].toString(); 
    if (countClicks < vectorRoundResult.length-1) 
    { 
     countClicks++; 
    } 
    else 
    { 
     countClicks = 0; 
    } 
} 

[/編輯]

+0

我希望這可能會給你一些想法... 此致敬意。 Nicolas @ E.Lil – tatactic

+0

尼爾戴維斯和VCOne肯定比我更有效率。 所以先試試他們的建議! – tatactic

+0

我真的不知道誰回覆了這個答案,但現在編輯後可能太長了,也許嘈雜了...... :( – tatactic