티스토리 뷰
728x90
반응형
Number와 관련된 유틸 클래스이다.
이것도 예전 2.0때부터 써오던 클래스모음이다.
최근에 한번 수정을 하긴 했지만 여전히 개선될 것들이 있긴 하다.
그래도 역시 나름 쓸만 하다. ㅎㅎㅎ
이것도 예전 2.0때부터 써오던 클래스모음이다.
최근에 한번 수정을 하긴 했지만 여전히 개선될 것들이 있긴 하다.
그래도 역시 나름 쓸만 하다. ㅎㅎㅎ
package oddeye.utils
{
import flash.display.DisplayObject;
import flash.geom.Point;
import flash.geom.Rectangle;
import oddeye.control.Debug;
public class NumberUtils
{
/**
* 인자값 타입이 Number 인지 체크
* @param data
* @return
*/
public static function getIsNumber( data:* ):Boolean
{
return ( Number( data ) is Number ) ? true : false;
}
/**
* 데이터 값 Number 체크 후에 값 리턴~
* @param value
* @return
*/
public static function getNumberValue( value:Number ):Number
{
if ( value is Number )
{
return Number( value );
}
return NaN;
}
/**
* 총 합계 구하기
* @param datas
* @return
*/
public static function getSum( datas:Array ):Number
{
var total:Number=0;
var len:int = datas.length;
for ( var i:int=0; i < datas.length; i++ )
{
if ( NumberUtils.getIsNumber( datas[ i ] ) )
{
total+=Number( datas[ i ] );
}
else
{
continue;
}
}
return total;
}
/**
* 최대값을 구하고 그 최대값의 한계치를 구한다.
* 예를 들어 입력한 배열로 최대값이 100819 이렇게 나왔다면 한계치는 200000 처럼 나오게 된다.
* @param data 수치값들이 들어가 있는 배열~
* @return
*/
public static function getMaxValueToLimit( data:Array ):Number
{
var nums:Number = NumberUtils.getMax( data );
var numLen:int = String( nums ).length;
var indexNum:String= String( nums ).charAt( 0 );
var idx:int = -1;
while ( ++idx < numLen - 1 )
{
indexNum=indexNum + "9";
}
return Number( indexNum )+1;
}
/**
* 최대값 구하기
* @param data
* @return
*/
public static function getMax( data:Array ):Number
{
var maxData:Number = -1;
var dataLen:int = data.length;
var clones:Array = [];
for ( var i:int = 0; i < dataLen; i++ )
{
var splitText:String = StringUtils.getSplitTxt( data[ i ], "," );
if ( NumberUtils.getIsNumber( splitText ) )
{
clones.push( Number( splitText ) );
}
}
maxData=ArrayUtils.getMaxValue( clones );
clones.length=0;
clones=null;
return maxData;
}
public static function getNumbersToMax( ... args ):Number
{
//public static const NUMERIC:uint = 16 - Array 클래스에 문자-문자열 정렬이 아닌 숫자 정렬 방식을 지정합니다
//public static const RETURNINDEXEDARRAY:uint = 8 - 정렬을 통해 배열 인덱스로 구성된 배열을 반환하도록 지정합니다.
return ArrayUtils.getMaxValue( args ); /////////////////// items[ items.sort( Array.NUMERIC | Array.RETURNINDEXEDARRAY )[ items.length - 1 ] ];
}
/**
* 최소, 최대 범위값 지정
* @param offset - 수치값
* @param max - 최대범위값
* @param min - 최소범위값
* @return
*/
public static function getRange( offset:Number, max:Number, min:Number ):Number
{
if ( offset <= min )
offset=min;
if ( offset >= max )
offset=max;
return offset;
}
/**
* 카운트값 증감, 차감 시킴~
* @param count 지정한 카운트 값
* @param len 최대 length 값
* @param rightDirect 좌우클릭, 업다운클릭, 차감증감을 뜻함~
* @param countLoop 0~최대값 사이를 계속 롤링할지여부~
* @return
*/
public static function getCount( count:int, len:int, rightDirect:Boolean = true, countLoop:Boolean = false ):int
{
if ( rightDirect )
count++;
else
count--;
//countLoop 가 true이면 0카운트에서
//차감하면 최종length값이 적용되어서 카운트 롤링이 된다.
if ( countLoop )
{
if ( count > len )
count=0;
if ( count < 0 )
count=len;
}
else
{
if ( count > len )
count=len;
if ( count <= 0 )
count=0;
}
return count;
}
/**
* integer값 판단~
* @param value 적용
* @return
* @example NumberUtils.getIsInteger( 1.5643 ) ///false;
* NumberUtils.getIsInteger( 21 ) ////true;
*/
public static function getIsInteger( value:Number ):Boolean
{
return ( value % 1 ) == 0;
}
/**
* 짝수 유무 - & 1로 대입된 값을 연산
* @param value 적용값
* @return
* @example NumberUtils.getIsEven( 32 ) //true
* NumberUtils.getIsEven( 11 )//false
*/
public static function getIsEven( value:Number ):Boolean
{
//& 연산은 기본적으로 두수의 비트를 연산하여 서로 1일때 1을 반환하고 그렇지 않은 경우 0을 반환
//비트의 첫자리가 0으로 시작하는 수는 보통 짝수~00000010(2), 00000100(4), 00001000(8), 00010000(16)......
//그렇기에 홀수 & 1 은 1을 반환, 짝수 & 1은 0을 반환~
return ( value & 1 ) == 0;
}
/**
*
* 홀짝수 구분
* @param n - 적용할 수치
* @return
*
*/
public static function getIsOdd( value:Number ):Boolean
{
//var oddNum:Boolean = ( value % 2 != 0 ) ? true : false;
return !NumberUtils.getIsEven( value );
}
/**
* 소수( 1과 자기자신만으로 나누어 떨어지는 자연수) 유무
* @param value
* @return
*/
public static function getIsPrime( value:Number ):Boolean
{
// 1, 2는 기본적으로 소수
if ( value == 1 || value == 2 )
return true;
//1, 2외에 짝수는 소수가 아님~
if ( NumberUtils.getIsEven( value ) )
return false;
//제곱근을 구해서 그 수많큼 반복하여 나머지가 0인지 판단( 0 이면 소수가 아님 )
var s:Number = Math.sqrt( value );
for ( var i:Number = 3; i <= s; i++ )
{
if ( value % i == 0 )
return false;
}
return true;
}
/**
*
* 소수점 제한하기
* @param n - 적용할 수치
* @param limit - 제한되는 소수점
* @return
*
*/
public static function getDecimal( num:Number, limit:Number ):Number
{
// 10을 limit 자리수만큼 제곱한다.
var p:Number = Math.pow( 10, limit );
//p(10을 limit만큽제곱된 수)를 num과 곱한 값에 Math.round를 하면 소숫점이 반올림되어 정수가 된다.
// 거기에 p(10을 limit만큽제곱된 수)를 다시 나누면 limit만큼의 소수점 자리를 갖게 된다.
return Math.round( p * num ) / p;
}
/**
* value로 대입된 수를 기준으로 제일 가까운 수를 반환한다. 2번째와 3번째 순서는 바뀌어도 상관이 없다.
* @param value 비교기준이 되는 수
* @param first 비교 첫번째수
* @param second 비교 두번째수
* @return
*/
public static function getNearNumber( value:Number, first:Number, second:Number ):Number
{
return Math.min( Math.max( value, Math.min( first, second ) ), Math.max( first, second ) );
}
/**
* 두 수의 중간값(Interpolate)에서 percent 만큼의 수를 반환
* @param per
* @param begin
* @param end
* @return
*/
public static function getInterpolate( amount:Number, begin:Number, end:Number ):Number
{
return begin + ( end - begin ) * amount;
}
/**
* 입력된 data는 max값에 대해 몇 퍼센트인지를 반환
* @param data - 값
* @param max - 최대값
* @return
*/
public static function getPercent( data:Number, max:Number ):Number
{
return Math.floor( data / max * 100 ) / 100;
}
/**
* 로드 데이타 퍼센트 구하기
* @param min
* @param max
* @return
*/
public static function getLoadPercent( min:Number, max:Number ):Number
{
return Math.floor( min / max * 100 );
}
/**
* 데이터 값으로 스트림 바 같은 크기값을 구할때 사용
* (현재 데이터/총데이터)*그래픽총크기값
* @param currentData 현재 진행중인 데이터
* @param totalData 총 데이터값
* @param value 그래픽 등의 총값
* @return
*/
public static function getValueAverage( currentData:Number, totalData:Number, value:Number ):Number
{
return Math.floor(( currentData / totalData ) * value );
}
/**
* frameRate 값 가져오기~
* @return
*/
public static function getFrameRate():Number
{
return StageUtils.getStage().stage.frameRate;
}
/**
* 시간 표시 변환 메소드~
* @param t
* @return
*/
public static function getProcessTime( t:int ):String
{
var processTime:int = t;
var hour:int = int( processTime / 3600 );
var minute:int = int( processTime % 3600 ) / 60;
var second:int = int( processTime % 3600 ) % 60;
var returnTime:String = ( minute < 10 ? "0" : "" ) + minute + ":" + ( second < 10 ? "0" : "" ) + second;
return returnTime;
}
/**
* 숫자에 0 붙이기~
* @param value
* @return
*/
public static function addLeadingZero( value:Number ):String
{
return ( value < 10 ) ? '0' + value : value.toString();
}
/**
* 세자리수 마다 입력된 String으로 배치 및 추가인덱스에 추가 문구 삽입
* @param value
* @param minLen 인덱스값을 거꾸로 삽입~
* @param kDelim=","
* @param fillChar="0"
* @example NumberUtil.getFormat(1234567, ",", 8, "$"); // Traces $1,234,567
* @return
*/
public static function getFormat( value:Number, minLen:uint = 0, kDelim:String = ",", fillChar = "0" ):String
{
const remainder:Number = value % 1;
var num:String= Math.floor( value ).toString();
const len:uint= num.length;
//minLen 값이 0과 다를때 직접 대입되는 값이 있다면 실행~
if ( minLen != 0 && minLen > len )
{
minLen-=len;
const addChar:String =fillChar || '0';
while ( minLen-- )
num=addChar + num;
}
if ( kDelim != null && num.length > 3 )
{
const totalDelim:uint = Math.floor( num.length / 3 );
const totalRemain:uint = num.length % 3;
const numSplit:Array= num.split( '' );
var i:int= -1;
while ( ++i < totalDelim )
numSplit.splice( totalRemain + ( 4 * i ), 0, kDelim );
if ( totalRemain == 0 )
numSplit.shift();
num=numSplit.join( '' );
}
if ( remainder != 0 )
num+=remainder.toString().substr( 1 );
return num;
}
/**
*
* 소수점 지우기~반올림하지 않는다.
* @param n - 적용할 수치
* @return
*
*/
public static function getDecimalClear( n:Number ):int
{
var sn:int = int( n );
return sn;
}
/**
*
* 주어진 수치값에 0붙이기~
* @param n - 0붙일 문자
* @param len - 제한할 문자수
* @return
*
*/
public static function getAddNumToZero( n:Number, len:Number ):String
{
var r:String;
r=String( n );
while ( r.length < len )
r="0" + r;
return r;
}
/**
* 서수 만들기
* @param value
* @return
* @example
*
* trace(32 + NumberUtil.getOrdinalSuffix(32)); // Traces 32nd
*
*/
public static function getOrdinalSuffix( value:int ):String
{
if ( value >= 10 && value <= 20 )
return 'th';
if ( value == 0 )
return '';
switch ( value % 10 )
{
case 3:
return 'rd';
case 2:
return 'nd';
case 1:
return 'st';
default:
return 'th';
}
}
}
}
728x90
반응형
'Programming language > Flash' 카테고리의 다른 글
유용한 정보 사이트~ (0) | 2012.02.14 |
---|---|
BitmapData를 PNG나 JPG로 변환하여 ByteArray로 서버에 전송하는 방법 (0) | 2012.02.14 |
나만 유용한 클래스5~ DefineClass.as (0) | 2012.02.09 |
나만 유용한 클래스4 StringUtils.as (0) | 2012.02.08 |
다 읽지도 않고 jpg 파일 정보 알아내기 (0) | 2012.02.08 |
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 반복문
- cordova
- svg모션
- 태그
- 아이콘 폰트 만들기
- CSS
- for of 구문
- RefreshToken
- react
- react-router-dom
- Aptana
- Vue3
- JsDoc
- anime.js
- Angular
- git
- git checkout -b
- 자바스크립트
- 코도바
- svg 폰트
- 내장요소
- 앵귤러
- svg icon font
- interceptors
- IntrinsicElements
- vue-router
- React.StrictMode
- icon font
- Intrinsic
- 리프래시토큰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함