Формат C # Двойная научная запись в степенях, кратных трем - PullRequest
5 голосов
/ 10 августа 2011

Я пытаюсь отформатировать несколько больших чисел в научном формате, но мне нужна мощность, кратная трем. Есть ли рекомендуемый способ сделать это?

У меня есть диапазон чисел в таблице, и вместо истинного научного формата (с одной цифрой перед десятичной запятой) я счастлив иметь это изменение, чтобы иметь, например, степень, кратную трем. :

3.123e + 003
19.523e + 003

Вместо:

3.123e + 003
1.952e + 004

Полагаю, что все силы, кратные трем, облегчают сканирование моего стола.

Заранее спасибо

1 Ответ

4 голосов
/ 10 августа 2011

Я думаю, вам нужно написать свою собственную функцию. Сначала вы можете получить научное представление числа с точностью на две цифры больше, чем вам нужно. Затем вам нужно проанализировать полученную строку, чтобы получить коэффициент с плавающей запятой и индекс степени 10 как числа десятичного типа. После этого вы анализируете остаток индекса деления на 3 и меняете числа соответствующим образом. Наконец вы генерируете выходную строку.

static string Scientific3(double value, int precision)
{
    string fstr1 = "{0:E" + (precision+2).ToString() + "}";
    string step1 = string.Format(fstr1, value);
    int index1 = step1.ToLower().IndexOf('e');
    if (index1 < 0 || index1 == step1.Length - 1)
        throw new Exception();
    decimal coeff = Convert.ToDecimal(step1.Substring(0, index1));
    int index = Convert.ToInt32(step1.Substring(index1 + 1));
    while(index%3!=0)
    {
        index--;
        coeff *= 10;
    }
    string fstr2 = "{0:F" + precision.ToString() + "}E{1}{2:D3}";
    return string.Format(fstr2, coeff, ((index < 0) ? "-" : "+"), Math.Abs(index));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...