Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > преобразование String в число...


Автор: RUVATA 15.2.2011, 16:45
Всем доброго времени суток...
Из справки по VB.NET вычитал, циатата:

Тип данных String (Visual Basic) участвует лишь в небольшом числе расширяющих преобразований. String расширяется только до себя и типа Object, и только типы Char и Char() (массив Char) расширяются до типа String. Это происходит потому, что переменные и константы String могут содержать значения, которые другие типы данных не могут содержать. 

А как-же быть ? если я например с txt считал строку, распарсил ее и мне некоторые ее части необходимо использовать как числа? да и вообще если надо, а это не редкость
Это-же абсурд... надеюсь что способы таки есть...

Автор: diadiavova 15.2.2011, 17:03
У всех числовых типов есть методы Parse и TryParse. Используй их.

Автор: RUVATA 15.2.2011, 18:34
Visual Studio 2010 (
еще фитча справка показывает вот...

Conversions - класс

Содержит методы, выполняющие различные преобразования типов.

Пространство имен:   Microsoft.VisualBasic.CompilerServices
Сборка:   Microsoft.VisualBasic (в Microsoft.VisualBasic.dll) 


где якобы есть заветный 

Conversions.ToDecimal - метод (String)

Преобразует строку в значение типа Decimal.  

А так-же есть ToIntegerToDouble и все на свете
Ну так ёб-т это пространство имен, не импортируется и его вообше нигде нет
кроме пользовательских ссылок, где гордо ставишь галочку а толку ни фига.
Простансво Microsoft.VisualBasic поддерживается автоматически, но судя
по обозревателю нет в нем CompilerServise

Что это ?

Автор: RUVATA 15.2.2011, 18:51
Да что за хрень беру из примера...

Код

Dim x As Double
x = Double.Parse("32.115")


на тебе! значение имеет не правильный формат... да ё-пт...

Цитата из справки, которая выскакивает как help по вызванному исключению
Double.Parse will throw a FormatException if its string argument is not in a recognizable numeric format. 
The Examples:

Код

' The first three statements run correctly.

Console.WriteLine(Double.Parse("32,115"))

Console.WriteLine(Double.Parse("32115"))

Console.WriteLine(Double.Parse("32.115")) ' Вот это разве не то что у меня вызывает исключение!

' The following statement throws a FormatException.

' Console.WriteLine(Double.Parse("32 115"))

Автор: diadiavova 15.2.2011, 19:22
Цитата(RUVATA @  15.2.2011,  18:34 Найти цитируемый пост)
 но судя
по обозревателю нет в нем CompilerServise

Обозреватель показывает не все.
Цитата(RUVATA @  15.2.2011,  18:51 Найти цитируемый пост)
на тебе! значение имеет не правильный формат... да ё-пт...

Ставь запятую, или используй перегрузку метода, в которой есть IFormatProvider.

Автор: A5uKa 16.2.2011, 16:45
Цитата

Console.WriteLine(Double.Parse("32.115")) ' Вот это разве не то что у меня вызывает исключение!
' The following statement throws a FormatException.


Аппладирую стоя

Автор: -Mikle- 16.2.2011, 19:01
Как и сказал diadiavova, перегрузка метода Parse с одним аргументом использует текущие региональные настройки системы. При необходимости парсить строку из например текстбокса в который вводится например сумма, это работает как раз так как должно. Символом разделения дробной части в "независимом" формате является точка. Если ожидается что в строке содержится дробное число в "независимом" формате (например, если вы пишете компилятор или низкоуровнево читаете из XML или... или... или...), то используйте явную передачу формата:

Код

    double num = double.Parse("34.232", CultureInfo.InvariantCulture);


В приведенном примере в строке всегда будет ожидаться точка, не зависимо от текущих региональных настроек пользователя ОС.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)