2016-12-02 5 views
0

私は助けが必要です。 1.2345から1.234から1.23などの小数点以下の小数点以下の桁数のボタンを作りたいと思います。その数を丸めてからMath.roundを使いたくないのです* 10/10、* 100/100を使用してください。なぜなら、私は答えに小数点以下の違いがあるからです。このボタンは、btnEqualsをクリックして答えを丸めた後、電卓で作業する必要があります。as3 - 小数点以下10進数のボタン

また、 "List"コンポーネントのラベルにaddEventListenerを使用すると助けが必要です。

+1

だから、あなたがボタンをクリックするたびに、あなたはそれを丸めますもう1つの場所? –

+1

また、 'yourNumber.toPrecision(x);があなたの望むことをしているかどうかをチェックします。' x'は小数点以下の必要桁数です。 –

+1

@NealDavisはい、それは私が意味するものです。 –

答えて

2

私はよく質問を理解してきた場合、私は知りませんが、あなたのケースで私はこのような何か:D

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 

を。床:恐らくMath.roundについては

floor result = 1.2345,1.234,1.23,1.2 

round result = 1.2345,1.235,1.23,1.2 
あなたがボタンをクリックしたときに結果を得るために、コードを変更することがあり

...

申し訳ありませんが、私の英語は本当に悪いです! これはおそらく間違った答えです。 :(

TL; DR、より多くの情報だが、それは退屈だあなたは固定ベクタ長を使用する場合は

は、あなたがに機能を変更することがあります。ifきっと良いでしょう

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;;)

[EDIT]

のTextFieldや結果に別のコンポーネントを更新するには、あなたはこれを行うことがあります。

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; 
    } 
} 

[/ EDIT]

+0

私はこれがあなたにいくつかのアイデアを与えてくれることを願っています... よろしくお願いします。 Nicolas @ E.Lil – tatactic

+0

Neal DavisとVCOneは確かにIよりも効率的です。 だから、彼らの提案を最初に試してみてください! – tatactic

+0

私は本当にこの回答をアップした人が誰か分かりませんが、編集した後におそらくあまりにも長くなっています... – tatactic

関連する問題