Sayıları kısaltmak için harfleri kullanma


9

Meydan okuma

Bir sayı alın ve harf veya sayı kullanarak 4 veya daha az basamakla çıkın. Örneğin; 270,030dönüşecekti 270K.

anahtar

Milyar -> B

Milyon -> M

Bin -> K

kurallar

  • Her üç ondalık basamağı (örneğin 123,456,789) sınırlayan virgül içeren giriş numaralarını kabul etmeyi seçebilirsiniz .
  • En yakın, yarıya yuvarlayın.
  • Rakamlar yalnızca yukarı kalacaktır 999,499,999,999.
  • Cevabın mantis kısmı en az 1 olmalıdır.
  • Tüm harfler büyük ve yukarıda belirtildiği gibi olmalıdır.
  • Çıkışlar 4 veya daha az basamaklı olmalıdır. (örneğin harf içeren B, Kve M)
  • Çıktılar mümkün olduğunca matematiksel olarak kesin olmalıdır. Misal:
    • 15,480-> 20K TAMAM DEĞİL
    • 15,480-> 15.5K İYİ
  • Aynı matematiksel hassasiyete sahip birden fazla çıktı varsa, ikisinden birini döndürün. Misal:
    • 1000-> 1000 İYİ
    • 1000-> 1K İYİ

Örnekler:

1.234.567 -> 1.23 milyon
999.500 -> 1 milyon
999.499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100.000 -> 100K
12.345.678.912 -> 12.3B
1.452.815.612 -> 1.45B

gönderimler

Yanıtlar:


2

JavaScript, 84 79 bayt

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

Çevrimiçi deneyin!

(Girdileri sayı olarak alır)

Özel durumlar, ilki ise i < 1000, sayının kendisinin her zaman en kısa yollardan biri, tek yol olmasa bile.

Aksi takdirde, bölme, 1'in üzerinde önemli bir rakam elde etmeyene kadar 1000'e böler ve kaç bölümün yapıldığına dayalı bir sonek seçer.


Son durum, gevşek spesifikasyona dayanarak 999.5M olmalı veya belki de olmamalıdır.
Sihirli Ahtapot Urn

Bir trilyona kadar destek vermeniz gerektiğini unutmayın.
GarethPW

@GarethPW Spesifikasyona göre ( T -> trillionanahtarda Hayır ) 999,499,999,999'un üzerindeki sayıları temsil etmenin bir yolu yoktur , bu yüzden bunun üst sınır olduğunu varsaydım. Ben soracağım, ama aksi halde bir bayt kayıp.
Artyer

1

Python 3 , 127 bayt

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

Çevrimiçi deneyin!


biraz daha kısa: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 Hiçbir şey. Benim hatam.
Artyer

@rosslh Bu değişikliği yaptım ama 999499 -> 999M hatasını düzeltirken tutamadım.
GarethPW

1

JavaScript (ES7), 74 bayt

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

JavaScript (ES6), 80 bayt

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.