【问题标题】:as3 - A button to round number decimal by decimalas3 - 按小数对小数进行四舍五入的按钮
【发布时间】:2023-12-26 05:04:01
【问题描述】:

我需要帮助。我想制作一个将数字四舍五入的按钮,十进制小数,如 1.2345 到 1.234 到 1.23 等。我不想使用 Math.round 因为它会四舍五入,我不知道我是否可以使用 *10/10、*100/100 等,因为我的答案中有不同的小数位数。在我点击btnEquals之后,这个按钮必须在计算器上工作,然后四舍五入。

我还需要帮助才能将addEventListener 用于“列表”组件中的标签。

【问题讨论】:

  • 所以每次单击按钮时都希望它多舍一格?
  • 还要检查yourNumber.toPrecision(x); 是否符合您的要求...其中x 是小数点后所需的位数。
  • @NealDavis 是的,这就是我的意思
  • @E.Lil 请原谅我记性不好...这是yourNumber.toFixed(x); 其中x 是小数点后所需的位数。每次按下按钮时,您的按钮都应该只是 -1 变量 x 的值。现在尝试一个简单的测试并使用trace 命令检查...

标签: actionscript-3 rounding calculator


【解决方案1】:

我不知道我是否很好地理解了这个问题,但在你的情况下,我会做这样的事情:

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.floor :

floor result = 1.2345,1.234,1.23,1.2

对于 Math.round :

round result = 1.2345,1.235,1.23,1.2

您可以更改代码以在单击按钮时获得结果...

对不起,我的英语真的很糟糕! 所以这可能是一个错误的答案。 :(

TL;博士;更多信息,但很无聊!

如果你想使用一个固定的向量长度,你可以把函数改成:

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

}

如果你关心“表演”,那肯定会更好......

真的太长了,博士; ;)

[编辑]

要使用结果更新 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;
    }
}

[/编辑]

【讨论】:

  • 我希望这能给你一些想法......最好的问候。尼古拉斯@E.Lil
  • Neal Davis 和 VCOne 肯定比我更有效率。所以先试试他们的建议吧!
  • 我真的不知道谁赞成这个答案,但现在编辑后可能太长了,而且可能很吵...... :(
  • 别担心你的英语很好。 Asker 错误地定义了他们的问题。例如,四舍五入的1.2345 变为1.235 是正确的,但他们仍然期望1.234 所以他们真的需要.toPrecision(更可能是.toFixed)在某个点之后删除任何额外的数字,但他们令人困惑称之为“四舍五入”。谁知道这样一个质量很差的问题的正确答案是什么?来自 Asker 的可修复示例代码会在单词失败的地方提供很多帮助......
  • PS:您在此处输入的逻辑将在Math 甚至Javascript 标签上受到赞赏。即使这些问题使用其他编码语言,我也建议您关注它们。答案的逻辑在没有代码的情况下仍然有用......
最近更新 更多