2014-06-18 2 views
-4

B, 특정 길이와 K, m와 영리한 번호에 숫자로 변환 : 하우투 내가이 번호를 가지고 예를 들어

1M 

01M 

1.2M 

1.23M 

1.234M 

1.2346M 

1.23457M 

1,234,568 

01,234,568 

1,234,567.9 

1,234,567.89 

는 (K, M, B ...와) 같은 방법으로이 작업을 수행하는 모든 자바 스크립트 함수, 플러그인 또는 뭔가가 있나요?

답변

0

중복 된 질문이 아니기 때문에 나는 당신의 하향 투표를 이해하지 못합니다. 비슷한 것은 없습니다. 그래서 나는 나 자신에 의해 그것을 만들었고, 그것을 작동합니다

function number(num, size) { 

    var s = num; 

    var l1 = s.toString().length; 
    if (l1 > size && num > 1) s = Math.floor(num); 

    var l2 = s.toString().length; 

    if (l2 > size) { 
    if (num >= 1e3 && num < 1e6) { 

     s = num/1e3; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'k'; 

    } else if (num >= 1e6 && num < 1e9) { 

     s = num/1e6; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'M'; 

    } else if (num >= 1e9 && num < 1e12) { 

     s = num/1e9; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'G'; 

    } else if (num >= 1e12 && num < 1e15) { 

     s = num/1e12; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'T'; 

    } else if (num >= 1e15 && num < 1e18) { 

     s = num/1e18; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'P'; 

    } else if (num >= 1e18 && num < 1e21) { 

     s = num/1e18; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'E'; 

    } else if (num >= 1e21 && num < 1e24) { 

     s = num/1e21; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'Z'; 

    } else if (num >= 1e24 && num < 1e27) { 

     s = num/1e24; 
     var m = Math.max(0, size - 2 - (s.toString().split('.')[0] || num).length); 
     s = ((m == 0) ? Math.floor(s) : s.toFixed(m)) + 'Y'; 

    } 
    } 

    var l3 = s.toString().length; 
    if (l3 > size) s = '-'; 

    var s = s.toString(); 
    while (s.length < size) s = s.charAt(0) == '-' ? '-' + s : '0' + s; 

    var startZeros = /^(0)\1+/.exec(s), 
     startZerosCount = (startZeros != null) ? startZeros[0].length : 0, 
     decimalCount = (num.toString().split('.')[1] || []).length; 

    if (startZerosCount >= 2 && decimalCount > 0 && s.indexOf('.') < 0) { 

    var decimals = num.toString().split('.')[1], 
     movedDigits = Math.min(startZerosCount, decimalCount), 
     lastChar = s.substring(s.length - 1); 

    if (isNaN(lastChar)) { 
     s = s.substring(0, s.length - 1); 
     s = s.substring(movedDigits) + '.' + decimals.substring(0, movedDigits - 1); 
     s += lastChar; 
    } else { 
     s = s.substring(movedDigits) + '.' + decimals.substring(0, movedDigits - 1); 
    } 

    } 

    return s; 

} 

784432432.9999에 대한 출력은) :

- 
-- 
--- 
784M 
0784M 
784.4M 
784.43M 
784.432M 
784432432 
0784432432