2012-05-22 1 views
1

Я хочу изменить CultureInfo двойника или строки.Как изменить информацию о культуре на строку или двойную

Например я получаю двойное значение из кода в формате, как 3015.0

Я не знаю, в какой части это, но мне нужно значение в метрах, и они не в счетчиках, потому что я на высота cca.100m

Я попытался: double.Parse(test, new System.Globalization.CultureInfo("hr-HR"));

и double.Parse(test, new System.Globalization.CultureInfo());

, но ничто не правильный формат, что мне нужно.

Любая идея, что я могу сделать? Это приложение Windows Form C#, если это важно. Framework 4.0

EDIT:

Как вы можете видеть на этом LINK я имел подобную проблему раньше, и она была решена с информацией культуры. Проблема в том, что на рисунке 1 значения, которые я получаю, и на картинке 2 являются реальными значениями, которые мне нужно получить (когда я говорю, что я имею в виду в правильном формате), я думаю, что проблема в культуре где-то, как на моем ранее вопрос у меня возникла проблема с десятичными значениями).

+0

привет, на самом деле я был уверен, что это было правильное решение, но позвольте мне рассказать вам, в чем проблема. Я получаю это значение 3000 или 2729 как высоту. Когда я его конвертирую, я получаю значение 80-90 метров, что неверно, так как я на высоте приблизительно. 230м. Это означает, что это не правильная формула :), или я получаю что-то неправильно. Я использовал значение формулы = 0.03048 * высота, и это дает мне это значение, которое я написал. Есть идеи? –

ответ

4

Это не связано с информацией о культуре.

Похоже, вы получаете измерение в футах, пока вы ожидаете, что он будет в метрах. Фактически, 100 meters = 328.08399 feet и ваши измерения могут быть в 10 футах i.e 3015.0 = 301.5 feet (некоторые GPS-приемники не поддерживают поплавки или удваивают и поэтому возвращают только целые числа, умноженные на 10, чтобы иметь одну десятичную точность)

Если вы используете дешевый приемник GPS, как это ожидается, так как точность не такая уж большая (это объясняет, почему вы получаете 3015.0 вместо 3280)

Надеюсь, это поможет.

+0

+1. Да, возможно, высота указана в устройстве, специфичном для устройства. –

+0

все правильно, что вы сказали. Таким образом, формула состоит в том, чтобы преобразовать ноги в метры и делить на 10 –

+0

привет, на самом деле я был уверен, что это было правильное решение, но позвольте мне рассказать вам, в чем проблема. Я получаю это значение 3000 или 2729 как высоту. Когда я его конвертирую, я получаю значение 80-90 метров, что неверно, так как я на высоте приблизительно. 230м. Это означает, что это не правильная формула :), или я получаю что-то неправильно. Я использовал формулу 'значение = 0.03048 * высота ', и это дает мне это значение, которое я написал. Есть идеи? –

1

Настройка текущей культуры не будет конвертировать единицы для вас. Это влияет только на форматирование чисел (например, в некоторых культурах используется запятая вместо периода для десятичной точки). Вам нужно будет сделать преобразование единиц самостоятельно.

1

double.Parse просто преобразует строку в число. Он не выполняет преобразования единиц. Другая информация о культуре относится к десятичной запятой (например, по-французски) и т. Д.

Вам нужно будет вставить некоторую логику в ваше приложение, чтобы преобразовать число с того, что выглядит как ножки в метрах. Если вы можете быть уверены, что данные всегда будут в «неправильном» формате, тогда будет работать преобразование с шагом в футы в метры (1 фут = 0,3048 м). Учитывая, что это устройство GPS, вы можете это принять.

Если числа могут быть в любом формате, тогда вам нужно будет проанализировать количество и, если оно вне разумного диапазона, преобразуйте его. Однако это не удастся, если кто-то войдет в «100». Это метры или ноги?

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

+0

Я отредактировал мой вопрос –

2

Ваша проблема не имеет ничего общего с CultureInfo, но с преобразованием единиц. Вероятно, вам придется сделать конверсию единиц. Вы уверены, что число не 301,5? Это, вероятно, означало бы, что альтичность дается в футах.

double altitudeMeters = 0.3048 * altitudeFeet; 
+0

Я уверен, что в примере 3005.0 ... Я отредактировал мой вопрос –

0

Высота взята из строки $ GPGGA, которая указывает используемые единицы измерения. Как выглядит строка $ GPGGA?

см http://aprs.gids.nl/nmea/#gga

, если вы посмотрите на необработанных данных в строке вы будете знать, если вы собираете правильные цифры и их единицы

Alex

+0

, получив образец строки $ GPGGA от Denonth "$ GPGGA, 195647.000,4633.3942, N, 01538.7926, E, 1,05,2,3,3.1.1.1, M, 43.3, M ,, 0000 * 5D" Я бы сказал, что его GPS сообщает о высоте 300 метров – Alex

+0

относительно того, почему он видит это как ~ 3000 в своем программном обеспечении - возможно, это эффект культуры – Alex

 Смежные вопросы

  • Нет связанных вопросов^_^