Настройка метода отображения формата "G" для экспоненциального формата (или замена на пользовательскую числовую строку)

Когда я отображаю double как строку, используя стандартный числовой формат "G4", я получаю следующие результаты:

.0000001 -> 1E-07
.000001 -> 1E-06
.00001 -> 1E-05
.0001 -> 0.0001
.001 -> 0.001
.01 -> 0.01
.1 -> 0.1
1 -> 1
10 -> 10
100 -> 100
1000 -> 1000
10000 -> 1E+04
100000 -> 1E+05

Я бы предпочел следующее (измененные строки помечены звездочкой):

.0000001 -> 1E-7 **
.000001 -> 1E-6 **
.00001 -> 1E-5 **
.0001 -> 0.0001
.001 -> 0.001
.01 -> 0.01
.1 -> 0.1
1 -> 1
10 -> 10
100 -> 100
1000 -> 1000
10000 -> 1E4 **
100000 -> 1E5 **

Как я могу сделать это с помощью стандартной или пользовательской строки числового формата? Это возможно даже с помощью строки числового формата?

1 ответ

Было бы хорошо, если бы кто-нибудь опубликовал формат строки, который делал именно то, что вам нужно, но до тех пор...

Следующий метод расширения сделает то, что вы хотите:

public static string ToFormattedString(this double i)
{
    var sciNumber = i.ToString("G4");

    // If the number has no exponent (such as .0001 or 100), return it as-is
    if (!sciNumber.Contains("E"))
        return sciNumber;

    var parts = sciNumber.Split('E');

    return string.Concat(parts[0], "E", Convert.ToInt32(parts[1]));
}

Получив экспонентную часть строки и снова преобразовав ее в двойное, мы можем (как побочный эффект) в итоге преобразовать -07 в -7 а также +04 в 4,

Должен быть в состоянии вызвать это используя:

var input1 = .0000001;
var input2 = 10000;

var output1 = input.ToFormattedString();  // 1E-7
var output2 = input.ToFormattedString();  // 1E4
Другие вопросы по тегам