Есть ли элегантный способ конвертировать двойной символ в строку, чтобы округлить его до максимальной общей длины, но в остальном он похож на формат нейтральной культуры по умолчанию?
Я не хочу просто ограничивать число знаков после запятой, потому что количество символов, используемых для знака и экспонента, может измениться, или это может быть не в научной нотации.
Например, максимум 20 символов
-1.23456789012345E-67
должен выглядеть как
-1.2345678901235E-67
в то время как
123
должно отображаться как 123
, а не 1.23E+02
.
Как отметил Sintar, спецификатор формата G должен делать все, что вам нужно.
double s = 1.31956544564371E+28;
Console.WriteLine("{0:G5}",s); // will print 1.3196E+28
Может быть полезным следующий метод расширения:
public static class doubleExtensions
{
public static string GetDoubleString(this double source,int numOfChars){
string temp = "{0:G" + numOfChars + "}";
return string.Format(temp,source);
}
}
G
должен создавать наиболее компактное строковое представление. Возможно, вы захотите реализовать собственный форматер (как метод расширения дляdouble
примера), который будет выполнять всю вашу логику: преобразование, проверка и т. Д.