Настройка метода отображения формата "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