2012-07-13 4 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

Genius! 나는이 속임수를 기억할 수 없었다. 실제로 메모리 오버 플로우 문제로 수년 전 그랬습니다. 이것이 교과서인지 확실하지 않지만 위대한 마음은 똑같이 생각합니다! – ejbytes

-1

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

, 1은 반환 Math.Round ((인 Math.random() * (최대 - 최소) + 분), 2) 사용할 수있는 소수의이 개 장소를 한 곳

까지 반올림한다;

지금 도움이 되었기를 바랍니다.

+0

이렇게하면 첫 번째 숫자 (1.3이 아닌 1) 만 반환됩니다. –

+0

코드를 실제로 사용해 보셨습니까? 그것이 AS3의'Math.round()'가 작동하는 방식이 아닙니다. 그것은 단지 하나의 논증을 취합니다. –

1

당신은 결과 및 성능으로 번호가 필요한 경우, 나는이 솔루션은 Math.pow()보다 더 효율적입니다 말할 것/수학 . around() one. 당신이 3 개 소수 필요하면 그냥 반올림 보여 1000

var myNumber:Number = 3.553366582; 
myNumber = ((myNumber * 100 + 0.5) >> 0)/100; 
//trace = 3.55 

100을 변경

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

어떤 연산이 더 복잡한 지 궁금합니다 - 반올림, 곱하기 및 허용 된 응답에서와 같이 나누기? 또는 문자열과 숫자 사이에서 앞뒤로 캐스팅하십시오. –

관련 문제