Nano Hash - криптовалюты, майнинг, программирование

Как отформатировать числа, чтобы они содержали одинаковое количество цифр?

У меня есть метка, показывающая целое число без знака, и она имеет максимальную длину. Я бы хотел отформатировать числа, чтобы они отображались так:

1           = "1"
1000        = "1,000"
12400       = "12.4k"
101,800,000 = "102M" // !!!
1,849,000   = "1.85M"

Итак, у меня получилась струна максимальной длины 5.

Мой диапазон от 0 до 199 999 999.

Есть ли способ сделать это, не рассматривая множество случаев, то есть много интервалов?


  • Требования к вашей проблеме кажутся слишком специфичными для того, чтобы уже существующее решение делало именно то, что вы хотите. Вам, вероятно, придется написать свою собственную функцию. Кроме того, как 1,800,000 = 1,85M? И если ваш диапазон достигает максимума 1 999 999, как вы можете получить 101 800 000 = 102 миллиона? 15.08.2012
  • 101.800.000 - допустимый регистр с учетом диапазона от 0 до 1,999,999. ? 15.08.2012
  • извините, я испортил диапазон, с 1.85M и с разделителями (на моем языке. is, and, is.) ... 15.08.2012
  • Лично я бы написал метод расширения для беззнакового целочисленного класса, в который была бы встроена логика. У меня есть нечто подобное для дат, то есть 1 день назад, 14 дней назад, 3 месяца назад и т. Д. Для написания удобного форматирования в DateTime. 15.08.2012
  • Вам нужно ровно столько случаев, сколько отклонений вы планируете внедрить ... Так что в вашем случае это только нужно. 1024 - ›1,024, 12345 -› 12,4 тыс., 123456 - ›123 тыс., 1234567 -› 1,2 м, 12345678 - ›12 м. 5 случаев вы покрыли до одного миллиарда. 15.08.2012

Ответы:


1

Я, наверное, опоздал, но вот метод расширения, который возвращает числа в любом формате:

public static string ToShortString(this int n)
{
    if (n >= 1e8)
    {
        return (Math.Round((double)n / 1e6, 0)).ToString() + "M";
    }
    else if (n >= 1e7)
    {
        return (Math.Round((double)n / 1e6, 1)).ToString() + "M";
    }
    else if (n >= 1e6)
    {
        return (Math.Round((double)n / 1e6, 2)).ToString() + "M";
    }
    else if (n >= 1e5)
    {
        return (Math.Round((double)n / 1e3, 0)).ToString() + "K";
    }
    else if (n >= 1e4)
    {
        return (Math.Round((double)n / 1e3, 1)).ToString() + "K";
    }
    else if (n >= 1e3)
    {
        return n.ToString("##,#");
    }
    else
    {
        return n.ToString();
    }
}

Тесты:

Console.WriteLine((5).ToShortString());         // displays 5
Console.WriteLine((55).ToShortString());        // displays 55
Console.WriteLine((555).ToShortString());       // displays 555
Console.WriteLine((5555).ToShortString());      // displays 5,555
Console.WriteLine((55555).ToShortString());     // displays 55.6K
Console.WriteLine((555555).ToShortString());    // displays 556K
Console.WriteLine((5555555).ToShortString());   // displays 5.56M
Console.WriteLine((55555555).ToShortString());  // displays 55.6M
Console.WriteLine((555555555).ToShortString()); // displays 556M
15.08.2012

2

В этом ответе показано, как это сделать разными способами: Округлые числа с суффиксом K

К сожалению, я не знаю, как это сделать без хотя бы изрядного количества случаев. Но некоторые ответы в приведенном выше вопросе делают это довольно элегантно и с минимальным объемом кода.

15.08.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..