AS3中如何将小数保留一位?

5

我使用以下方法随机生成一个十进制数:

private function randomNumber(min:Number, max:Number):Number
    {
        return Math.random() * (max - min) + min;
    }

它会得出类似于1.34235346435的结果。

如何将其转换为1.3。

4个回答

14

你可以像这样保留一位小数进行四舍五入:

var newValue:Number = Math.round(oldValue * 10)/10

或者像这样任意数量的小数位:

function round2(num:Number, decimals:int):Number
{
    var m:int = Math.pow(10, decimals);
    return Math.round(num * m) / m;
}
trace(round2(1.3231321321, 3)); //1.323

天才!我想不起来这个技巧了。我几年前为解决内存溢出的问题实际上就是这么做的。不确定这是否是教科书式的,但伟大的思想总是相似的! - ejbytes

5

只需使用 .toFixed 或 .toPrecision 方法,不必复杂化(请注意,数字将变成字符串,因此您需要将其分配给字符串或将其转换回数字)。

例如:

    var numb:Number = 4.3265891;
    var newnumb;

    newnumb=numb.toFixed(2);//rounds to two decimal places, can be any number up to 20
    trace(newnumb);//traces 4.33

    newnumb=numb.toPrecision(3);//the 3 means round to the first 3 numbers, can be any number from 1 to 20
    trace(newnumb);//traces 4.33

我想知道哪个操作更复杂 - 四舍五入、乘法和除法,就像被接受的答案中所述?还是在这个问题中来回转换字符串和数字? - matt lohkamp

2
如果你需要数字作为结果,且关注性能,我会说这种解决方法比使用Math.pow()/Math.round()更加高效。如果你需要三位小数,只需将100改为1000即可。
var myNumber:Number = 3.553366582;
myNumber = (( myNumber * 100 + 0.5)  >> 0) / 100;
//trace = 3.55

展示四舍五入的方法:
var myNumber:Number = 3.557366582;
myNumber = (( myNumber * 100 + 0.5)  >> 0) / 100;
//trace = 3.56

-1

请使用以下代码:

return Math.Round((Math.random() * (max - min) + min),1);

其中,.1将会四舍五入至小数点后一位。

如果需要保留两位小数,请使用以下代码:

return Math.Round((Math.random() * (max - min) + min),2);

希望这能对您有所帮助。


这只会返回第一个数字(1,而不是1.3)。 - Jonatan Hedborg
你真的试过你的代码吗?这不是 AS3 的 Math.round() 的工作方式。它只需要一个参数。 - Jonatan Hedborg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接