#c# #string #format #double #type-conversion
#c# #строка #формат #double #преобразование типов
Вопрос:
Я попытался выполнить поиск в Google и stackoverflow, но безуспешно.
У меня возникла проблема с «вводимой строкой не в правильном формате». исключение с приложением, над которым я работаю.
Дело в том, что я преобразую некоторые двойные значения в строки с двойным номером.toString(«N2»); для того, чтобы сохранить их в XML-файле. Когда я переключаю тестовые машины, XML-файл, хранящийся на одной из них, не может быть возвращен обратно к двойным значениям.
Я перепробовал все решения, которые только мог придумать, но настройка культуры номеров с помощью CultureInfo не сработала.Неизменяемая культура, замена символов также не работает. Иногда значения сохраняются как «3,001,435.57», а иногда (на другом КОМПЬЮТЕРЕ) как «3.001.435,57».
Существует ли какая-либо функция или способ для синтаксического анализа double из string, независимо от формата ввода?
Спасибо.
Комментарии:
1. Должно быть, вы где-то напутали с использованием InvariantCulture. Это должно работать на любом КОМПЬЮТЕРЕ с согласованными разделителями чисел и десятичными дробями.
2. @jv42 Как я уже говорил в другом комментарии, она может быть сохранена в одном языке и прочитана в другом, поэтому язык не согласован с ПК, на которых может использоваться приложение.
3. Должно быть, я неправильно понял какую-то часть. Если вы создаете файлы, вы можете указать язык при сохранении (инвариантный), который будет таким же при загрузке (тоже инвариантный), чтобы он не отличался от компьютера к компьютеру.
4. @jv42 попытается перепроверить мой код, чтобы увидеть, не упускаю ли я где-нибудь использование языка culture. Convert.ToDouble дал мне несколько плохих результатов, поэтому я, возможно, где-то неправильно заменил его.
Ответ №1:
Вы должны указать язык, потому что (например.) «3,001» неоднозначно — это 3,001 или 3001?
В зависимости от того, как выглядят ваши числа, возможно, вы могли бы попытаться определить язык, подсчитав количество символов ,
и .
и / или проверив их позиции.
Комментарии:
1. Что-то подобное — это то, что я ищу… Подсчет количества символов не сработает, поскольку number может содержать только один из каждого. Единственное, что могло бы сработать, это проверить позицию десятичного разделителя, но это также может быть непросто, поскольку число может быть длиннее или короче после десятичной точки (например, 301.108).
2. Как насчет того, чтобы использовать TryParse для языка, перейти к следующему распространенному языку, если не удалось, промыть и повторить?
3. @Martheen Это могло бы сработать, я подумал, что у кого-то может быть более простое решение. Определите культуры и пытайтесь, пока одна не сработает, не похоже на элегантное решение.
Ответ №2:
Вот то, что вы ищете…
http://msdn.microsoft.com/en-us/library/9s9ak971.aspx
Это примет строковую переменную и поставщика формата. Вам необходимо создать поставщика форматов, который предоставляет информацию о культуре, из которой вы хотите конвертировать.
Комментарии:
1. Дело в том, что я не знаю этой культуры, поскольку приложение может быть использовано в нескольких культурах. Поэтому мне нужен способ определить культуру по строке, а не по системе, в которой она запущена. (Цифры могут быть сохранены в одном культурном формате и прочитаны в другом культурном формате)
2. вы бы получили язык из статического класса среды.