2012-07-13 80 views
4

我使用随机生成一个小数:as3中的小数点后一位小数吗?

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

它出来的东西像1.34235346435。

如何将其转换为1.3。

回答

12

你可以像这样四舍五入到一位小数;

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

天才!我不记得这个伎俩。我实际上是在那些年以前遇到了内存溢出的问题。不知道这是不是教科书,但伟大的思想家一样想! – ejbytes 2017-01-28 03:28:01

-1

用此代替 return Math.Round((Math.random()*(max-min)+ min),1);

,1会总结,直到1处

2位小数,你可以使用 回报Math.Round((的Math.random()*(最大值 - 最小值)+分),2);

我希望现在有帮助。

+0

这只会返回第一个数字(1,不是1.3)。 – 2012-07-13 11:17:50

+0

你真的尝试过你的代码吗?这不是AS3的'Math.round()'的工作原理。它只需要一个参数。 – 2012-07-13 12:31:10

1

如果您需要数量的结果和表现,我会说这个解决方案比Math.pow()更高效/数学。第一回合。如果你需要3位小数只是改变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 
4

只需使用.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 
+0

我想知道哪一种手术更为复杂 - 四舍五入,相乘和除法在公认的答案中?或者在一个字符串和一个数字之间来回转换? – 2015-08-05 02:03:37