この質問に基づく:数値をわかりやすい形式に丸める方法はありますか?
課題-更新されました! (仕様から数百の略語を削除)
整数(小数なし)を短縮する文字数による最短のコード。
コードには完全なプログラムを含める必要があります。
関連する範囲はfrom 0 - 9,223,372,036,854,775,807
(符号付き64ビット整数の上限)です。
省略形の小数点以下の桁数は正になります。次のように計算する必要はありません:(920535 abbreviated -1 place
これは次のようになります0.920535M
)。
数十と百の位(0-999
)の数字は決して省略されるべきではありません(小数点以下の数字の省略形は57
-不必要で友好的ではありません)。1+
5.7dk
ゼロから半分を丸めることを忘れないでください(23.5は24に丸められます)。銀行家の丸めは冗長です。
関連する番号の略語は次のとおりです。
h = hundred (10
2
)
k = thousand (10
3
)
M = million (10
6
)
G = billion (10
9
)
T = trillion (10
12
)
P = quadrillion (10
15
)
E = quintillion (10
18
)
サンプル入力/出力(入力は個別の引数として渡すことができます):
最初の引数は、短縮する整数になります。2番目は小数点以下の桁数です。
12 1 => 12 // tens and hundreds places are never rounded
1500 2 => 1.5k
1500 0 => 2k // look, ma! I round UP at .5
0 2 => 0
1234 0 => 1k
34567 2 => 34.57k
918395 1 => 918.4k
2134124 2 => 2.13M
47475782130 2 => 47.48G
9223372036854775807 3 => 9.223E
// ect...
関連する質問からの元の回答(JavaScript、仕様に準拠していません):
function abbrNum(number, decPlaces) {
// 2 decimal places => 100, 3 => 1000, etc
decPlaces = Math.pow(10,decPlaces);
// Enumerate number abbreviations
var abbrev = [ "k", "m", "b", "t" ];
// Go through the array backwards, so we do the largest first
for (var i=abbrev.length-1; i>=0; i--) {
// Convert array index to "1000", "1000000", etc
var size = Math.pow(10,(i+1)*3);
// If the number is bigger or equal do the abbreviation
if(size <= number) {
// Here, we multiply by decPlaces, round, and then divide by decPlaces.
// This gives us nice rounding to a particular decimal place.
number = Math.round(number*decPlaces/size)/decPlaces;
// Add the letter for the abbreviation
number += abbrev[i];
// We are done... stop
break;
}
}
return number;
}