Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поведение программы на разных компьютерах, почему исключение в Convert.ToDouble? 
:(
    Опции темы
CrazyHatter
Дата 31.10.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.11.2004
Где: Москва

Репутация: нет
Всего: нет



Пишу программу (С#), которая считывает данные из текстового файла, скажем "data.txt", и переводит их в числа. 
Использую функцию Convert.ToDouble(), она абсолютно нормально работает на моем компьютере и выдает правильный результат. На другом, для которого я собственно и пишу,  почему-то поднимает исключение InvalidCastException. Файл один и тот же...
На обоих компах стоит winXP, на обоих .net framework 1.1, только на одном работает, на другом нет...

Вопрос - может кто с таким встречался и как ваще такое может быть? Посоветуйте чего-нибудь...
PM MAIL   Вверх
Gelis
Дата 31.10.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: 2
Всего: 4



У тебя просто наверное на разных компьютерах разные региональные настройки
Запусти Панель управления\Язык и региональные настройки\Настройка и проверь что указано в поле разделитель целой и дробной части. А так читаем глову о локализации программ выложенную 
здесь
PM MAIL   Вверх
Gazon
Дата 1.11.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 3
Всего: 8



Либо:
var1 = Convert.ToDouble(str, CultureInfo.InvariantCulture);

Либо
Установи разделителем символ "." для культуры.
Код

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator=".";



Это сообщение отредактировал(а) Gazon - 1.11.2006, 00:09
--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
CrazyHatter
Дата 1.11.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.11.2004
Где: Москва

Репутация: нет
Всего: нет



Gelis Да, походу дело в разделителе... Спасибо, в настройках не догадался посмотреть.

Gazon Во, то что нужно! Спасибо, попробую!

PM MAIL   Вверх
Naum
Дата 1.11.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(Gazon @  1.11.2006,  01:06 Найти цитируемый пост)
Либо:
var1 = Convert.ToDouble(str, CultureInfo.InvariantCulture);

Либо
Установи разделителем символ "." для культуры.


Все таки лучше использовать первое, потому что много бывает подводных камней, не всегда за ними за всеми можно уследить. Например, где-нибудь в Турции "first"=="FIRST".ToLower будет False. smile Потому что в турецком алфавите имеются два варианта знака I: один с точкой и один без точки. В турецком алфавите знак I (код Юникода 0049) рассматривается как вариант другого знака, &#x0131 (код Юникода 0131) в верхнем регистре. Знак i (код Юникода 0069) рассматривается как вариант знака İ (код Юникода 0130) в нижнем регистре.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
CrazyHatter
Дата 1.11.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.11.2004
Где: Москва

Репутация: нет
Всего: нет



Так прокатило:
Код

Convert.ToDouble(str, CultureInfo.InvariantCulture);


А из проги изменить не получается, говорит, что instance is readonly
Код

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator=".";

PM MAIL   Вверх
mr.DUDA
Дата 2.11.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(CrazyHatter @  1.11.2006,  17:24 Найти цитируемый пост)
А из проги изменить не получается, говорит, что instance is readonly

Btw, можно создать новый инстанс культуры на основе существующего, с readonly=false, и в нём выставить нужный разделитель.


--------------------
user posted image
PM MAIL WWW   Вверх
archimed7592
Дата 2.11.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



или
Код
using System.Threading;
//...
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1039 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.