Интеллектуальное форматирование чисел в .net - PullRequest
1 голос
/ 11 марта 2009

Я нахожусь в процессе написания «умной» функции форматирования чисел, которая будет вести себя так:

1500 -> 1.5k
1517 -> 1 517
1234000 -> 1 234k
1200000 -> 1.2M

Возможно ли это сделать с помощью double.toString () или другого встроенного класса .net?

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

Ответы [ 2 ]

2 голосов
/ 11 марта 2009

Я не верю, что в .NET есть что-то подобное. Вот ключевая часть скрипта PowerShell, я должен сделать это для меня.

$prefixes = @('', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
$base = 1024;

$magnitude = [Math]::Floor([Math]::Log($_, 1024))

Write-Verbose "`$magnitude = $magnitude"

if($magnitude -eq 0)
{
    [string]$mantissa = $_
    [string]$label = 'B';
}
else
{
    [string]$mantissa = [String]::Format("{0:N}", $_ / [Math]::Pow(1024, $magnitude))

    Write-Verbose "`$mantissa = $mantissa"

    [string]$label = $prefixes[$magnitude]

    if ($IEC)
    {
        $label += "i"
    }

    $label += $unit
}


[String]::Format("{0} {1}", $mantissa, $label)

Необходимо обновить, чтобы использовать расширенные функции PowerShell V2. (Части, которые я не вставил, являются частями, которые пытаются сделать то, что делают Расширенные функции, и это грязно.)

0 голосов
/ 11 марта 2009

.NET-библиотеки не имеют ничего похожего на то, что вы ищете, но, используя Методы расширения , вы можете добавить к ним эту функциональность. Обратите внимание, что вы не можете переопределить методы, использующие расширения, только добавлять новые.

Однако, с точки зрения архитектуры, было бы лучше расширить необходимые классы, используя полиморфизм и переопределяющие методы ToSting. Это позволит избежать накладных расходов на методы расширения, но все же позволит передавать пользовательский класс методам, ожидающим тип номера .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...