Как избежать, когда C # будет преобразовано в строку десятичных экспоненциальном

В C #, если поплавок, значение двойного, десятичной типа, когда слишком много цифр после десятичной точки, C # будут использовать научные обозначения для представления десятичных значений.

Например, следующие виды двойной 0,00009, если мы будем использовать его непосредственно ToString () метод, чтобы преобразовать строку, она станет научной нотации 9E-05 (в настоящее время только десятичное число бит 0 будет научной нотации проблемы, например, 1,00009 не преобразуются ToString () метод является научной нотации)

двойное число = 0,00009 ;
Строка defaultNumber = number.ToString (); // 9E-05

 

Таким образом, мы можем показать формат после преобразования оператора строки, чтобы избежать научной нотации в C #:

с использованием системы; 

Пространство имен NetCoreFloat 
{ 
    класс Program 
    { 
        статический  аннулируются Main ( строка [] арг) 
        { 
            двойной номер = 0,00009 ;
            Строка defaultNumber = number.ToString (); // 9E-05 

            строка numberFromToString = number.ToString ( " N5 " ); // 0.00009 

            строка numberFromStringFormat = строка .Format ( " {0: F5} " , номер); // 0,00009

            Console.WriteLine ( « Нажмите любую клавишу , чтобы закончить ... » ); 
            Console.ReadKey (); 
        } 
    } 
}

Хотя приведенный выше код позволяет строки не преобразуются в десятичную экспоненциальное, то ясно, что нам нужно точно знать, сколько знаков после запятой после десятичной точки, для того, чтобы обеспечить точность преобразованное не теряется.

 

Если преобразовать формат точность слишком мал, это приведет к потере точности, следующим образом:

с использованием системы; 

Пространство имен NetCoreFloat 
{ 
    класс Program 
    { 
        статический  аннулируются Main ( строка [] арг) 
        { 
            двойной номер = 0,00009 ;
            Строка defaultNumber = number.ToString (); // 9E-05 

            строка numberFromToString = number.ToString ( " N 3 " ); // 0.000 

            строка numberFromStringFormat = строка .Format ( " {0: F3} " , число); // 0,000

            Console.WriteLine ( « Нажмите любую клавишу , чтобы закончить ... » ); 
            Console.ReadKey (); 
        } 
    } 
}

 

Если мы устанавливаем точность преобразования формата слишком велик, то избыток будет производить 0 в последнем дробным, следующим образом:

с использованием системы; 

Пространство имен NetCoreFloat 
{ 
    класс Program 
    { 
        статический  аннулируются Main ( строка [] арг) 
        { 
            двойной номер = 0,00009 ;
            Строка defaultNumber = number.ToString (); // 9E-05 

            строка numberFromToString = number.ToString ( " N10 " ); // 0,0000900000 

            строка numberFromStringFormat = строка .Format ( " {0: F10} " , число); // 0,0000900000

            Console.WriteLine ( « Нажмите любую клавишу , чтобы закончить ... » ); 
            Console.ReadKey (); 
        } 
    } 
}

 

В связи с этим мы должны использовать символ # в формате преобразования, символ # не будет производить дополнительный 0 в последнем десятичного знака, следующим образом:

с использованием системы; 

Пространство имен NetCoreFloat 
{ 
    класс Program 
    { 
        статический  аннулируются Main ( строка [] арг) 
        { 
            двойной номер = 0,00009 ; 

            Строка numberFromToString = number.ToString ( " 0 #####. " ); // 0.00009 
            numberFromToString = number.ToString ( " 0 ##########. " ); // 0.00009 

            число = 100,00009 ; 
            numberFromToString = number.ToString (" 0 #####. " ); // 100,00009 
            numberFromToString = number.ToString ( " 0 ##########. " ); // 100,00009 

            Console.WriteLine ( « Нажмите любую клавишу , чтобы закончить ... » ); 
            Console.ReadKey (); 
        } 
    } 
}

На самом деле, мы можем объявить максимум # 339 символов, поэтому вы можете быть уверены, что все десятичные может быть правильно преобразован в строку:

с использованием системы; 

Пространство имен NetCoreFloat 
{ 
    класс Program 
    { 
        статический  аннулируются Main ( строка [] арг) 
        { 
            двойной номер = 0,00009 ; 

            Строка numberFromToString = number.ToString ( " 0. " + новая  строка ( ' # ' , 339 )); // 0,00009 

            Console.WriteLine ( « Нажмите любую клавишу , чтобы закончить ... » ); 
            Console.ReadKey (); 
        }
    } 
}

 

Мы можем также объявить класс FormatStrings, то 339 # объявлен как символьная константа DoubleFixedPoint, так что это будет более удобно использовать:

с использованием системы; 

Пространство имен NetCoreFloat 
{ 
    общественных  статических  классов FormatStrings 
    { 
        общественный  Const  строка DoubleFixedPoint = " 0. ################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ##### " ; 
    } 

    Класс Program 
    { 
        статический  аннулируются Main ( строка[] Арг) 
        { 
            двойного число = 0,00009 ; 

            Строка numberFromToString = number.ToString (FormatStrings.DoubleFixedPoint); // 0,00009 

            Console.WriteLine ( « Нажмите любую клавишу , чтобы закончить ... » ); 
            Console.ReadKey (); 
        } 
    } 
}

 

 

Ссылки:

Преобразование чисел в строки без научной нотации в C #

Дважды в преобразовании строки без научной нотации

 

рекомендация

отwww.cnblogs.com/OpenCoder/p/10938017.html