スタック オーバーフローの評判表示に似た形式の文字列表現に数値を変換したいと考えています。
例えば
- 999 == '999'
- 1000 == '1,000'
- 9999 == '9,999'
- 10000 == '10k'
- 10100 == '10.1k'
スタック オーバーフローの評判表示に似た形式の文字列表現に数値を変換したいと考えています。
例えば
正確に目的の出力を生成する別のアプローチ:
function getRepString (rep) {
rep = rep+''; // coerce to string
if (rep < 1000) {
return rep; // return the same number
}
if (rep < 10000) { // place a comma between
return rep.charAt(0) + ',' + rep.substring(1);
}
// divide and format
return (rep/1000).toFixed(rep % 1000 != 0)+'k';
}
ここで出力結果を確認してください。
更新: CMS は小切手を受け取り、優れた回答を提供します。彼の方法でこれ以上の投票を送ってください。
// formats a number similar to the way stack exchange sites
// format reputation. e.g.
// for numbers< 10000 the output is '9,999'
// for numbers > 10000 the output is '10k' with one decimal place when needed
function getRepString(rep)
{
var repString;
if (rep < 1000)
{
repString = rep;
}
else if (rep < 10000)
{
// removed my rube goldberg contraption and lifted
// CMS version of this segment
repString = rep.charAt(0) + ',' + rep.substring(1);
}
else
{
repString = (Math.round((rep / 1000) * 10) / 10) + "k"
}
return repString.toString();
}
出力:
getRepString(999)
== '999'getRepString(1000)
== '1,000'getRepString(9999)
== '9,999'getRepString(10000)
== '10k'getRepString(10100)
== '10.1k'これは、iZend の一部である PHP の関数です - http://www.izend.org/en/manual/library/countformat :
function count_format($n, $point='.', $sep=',') {
if ($n < 0) {
return 0;
}
if ($n < 10000) {
return number_format($n, 0, $point, $sep);
}
$d = $n < 1000000 ? 1000 : 1000000;
$f = round($n / $d, 1);
return number_format($f, $f - intval($f) ? 1 : 0, $point, $sep) . ($d == 1000 ? 'k' : 'M');
}
Handlebars.registerHelper("classNameHere",function(rep) {
var repString;
if (rep < 1000)
{
repString = rep;
}
else if (rep < 10000)
{
rep = String(rep);
r = rep.charAt(0);
s = rep.substring(1);
repString = r + ',' + s;
}
else
{
repDecimal = Math.round(rep / 100) / 10;
repString = repDecimal + "k";
}
return repString.toString();
});
// Shortens a number and attaches K, M, B, etc. accordingly
function number_shorten($number, $precision = 3, $divisors = null) {
// Setup default $divisors if not provided
if (!isset($divisors)) {
$divisors = array(
pow(1000, 0) => '', // 1000^0 == 1
pow(1000, 1) => 'K', // Thousand
pow(1000, 2) => 'M', // Million
pow(1000, 3) => 'B', // Billion
pow(1000, 4) => 'T', // Trillion
pow(1000, 5) => 'Qa', // Quadrillion
pow(1000, 6) => 'Qi', // Quintillion
);
}
// Loop through each $divisor and find the
// lowest amount that matches
foreach ($divisors as $divisor => $shorthand) {
if (abs($number) < ($divisor * 1000)) {
// We found a match!
break;
}
}
// We found our match, or there were no matches.
// Either way, use the last defined value for $divisor.
return number_format($number / $divisor, $precision) . $shorthand;
}
これは私にとってはうまくいきました。これが役立つことを願っています。この質問をしてくれてありがとう。
1000 で割り、結果が 1 より大きい場合は、数値を四捨五入し、最後に「k」を連結します。
結果が 1 未満の場合は、実際の結果を出力するだけです!
これを行うためにnpm (およびbower ) モジュールを作成しました。
npm install --save approximate-number
使用法:
var approx = require('approximate-number');
approx(123456); // "123k"