문자를 사용하여 숫자를 줄이십시오


9

도전

문자와 숫자를 사용하여 숫자를 4 자리 이하로 출력하십시오. 예를 들어; 270,030로 바뀔 것 270K입니다.

십억-> B

백만-> M

천-> K

규칙

  • 소수점 이하 세 자리 (예 :)로 구분되는 쉼표를 포함하는 입력 번호를 허용하도록 선택할 수 있습니다 123,456,789.
  • 반올림, 반올림.
  • 숫자는까지만 올라갑니다 999,499,999,999.
  • 답의 가수 부분은 1 이상이어야합니다.
  • 모든 문자는 대문자 여야하며 위에 지정된대로 사용해야합니다.
  • 출력은 4 자리 이하 여야합니다. (예 : 문자를 포함하여 B, KM)
  • 출력은 가능한 수학적으로 정확해야합니다. 예:
    • 15,480-> 20K 확인 안됨
    • 15,480-> 15.5K 좋은
  • 동일한 수학적 정밀도를 가진 여러 개의 출력이있는 경우 둘 중 하나를 반환하십시오. 예:
    • 1000-> 1000 좋은
    • 1000-> 1K 좋은

예 :

1,234,567-> 1.23M
999,500-> 1M
999,499-> 999K
102-> 102
1000-> 1K
1001-> 1001
100,000-> 100K
12,345,678,912-> 12.3B
1,452,815,612-> 1.45B

제출물

답변:


2

자바 스크립트, 84 79 바이트

i=>{I=i;for(x=-1;i>=999.5;x++)i/=1e3;return I<1e4?I:+i.toPrecision(3)+'KMB'[x]}

온라인으로 사용해보십시오!

(입력을 숫자로 취함)

특별한 경우 첫 번째 경우 i < 1000, 숫자 자체는 가장 짧은 방법은 아니지만 항상 가장 짧은 방법 중 하나입니다.

그렇지 않으면 1보다 큰 수치를 갖지 않을 때까지 1000으로 나누고 나눈 분할 수에 따라 접미사를 선택합니다.


마지막 경우는 999.5M이어야하며 느슨한 사양에 따라 확실하지 않을 수 있습니다.
매직 문어 Urn

최대 1 조 개까지 지원해야합니다.
GarethPW

@GarethPW 사양에 따라 999,499,999,999 이상의 숫자를 표현할 수있는 방법이 없으므로 ( T -> trillion키의 아니오 ) 이것이 상한이라고 가정했습니다. 물어볼 것이지만 그렇지 않으면 1 바이트 손실입니다.
Artyer

1

파이썬 3 , 127 바이트

def f(n):s=str(n);l=len(s)-4;return f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[l//3+(int(s[3])>4)]if n>9999else n

온라인으로 사용해보십시오!


조금 더 짧은 :def f(n):l=len(str(n))-4;return[n,f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[-~l//3]][n>9999]
wrymug

1
@JonathanAllan 없습니다. 내 실수.
Artyer

@rosslh 나는 그 변경을했지만 999499-> 999M 버그를 수정할 때 유지할 수 없었습니다.
GarethPW

1

자바 스크립트 (ES7), 74 바이트

n=>n<1e4?n:(c=n.toExponential(2).split`e`).shift()*10**(c%3)+' KMB'[c/3|0]

자바 스크립트 (ES6), 80 바이트

n=>n<1e4?n:(c=n.toExponential(2).split`e`).shift()*[1,10,100][c%3]+' KMB'[c/3|0]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.