Как форматировать числа, похожие на формат репутации переполнения стека

android.text.style.ClickableSpan может решить вашу проблему.

SpannableString ss = new SpannableString("Android is a Software stack");
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View textView) {
        startActivity(new Intent(MyActivity.this, NextActivity.class));
    }
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);
    }
};
ss.setSpan(clickableSpan, 22, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView textView = (TextView) findViewById(R.id.hello);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(Color.TRANSPARENT);

// В XML: TextView: android: textColorLink = "@ drawable / your_selector"

13
задан Delan Azabani 5 July 2010 в 07:53
поделиться

3 ответа

Другой подход, который дает именно желаемый результат:

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';
}

Проверьте результаты вывода здесь.

26
ответ дан 1 December 2019 в 07:18
поделиться

разделите на 1000, тогда, если результат больше 1, округлите число и конкатенируйте «k» в конце.

Если результат меньше 1, просто выведите фактический результат!

-1
ответ дан 1 December 2019 в 07:18
поделиться

ОБНОВЛЕНИЕ : 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 '
10
ответ дан 1 December 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: