2012-04-24 4 views
0

Мне нужно преобразовать строку плавать, но могут быть различные входные строковые форматы, такие как '1234,5' или '1234.5' или '1 234,5' или '1,234.5' или любой другой. И я не могу изменить десятичный указатель локали или разделитель тысяч, потому что я не знаю, какие данные я получу заранее.Locale-indepenent строка плавать преобразование в питона

Есть ли способ или метод или библиотека для синтаксического анализа и преобразования для плавания такого типа значений, зависящих от локали, не зная, какой язык используется?

P.S. Существует ли какое-либо решение для той же проблемы с датами?

TIA.

+0

У строк всегда есть разделитель в виде десятичных знаков? – fraxel

+0

Они должны, но они также могут не – gorodechnyj

+0

ok, может ли быть более двух десятичных знаков? – fraxel

ответ

0

Вы можете сделать некоторые предположения о том, какой символ является разделителем тысяч и который является десятичной точкой. Тем не менее, есть случай, когда вы не можете знать наверняка, что же делать:

  • Посмотрите на последний символ, который . или ,. Если это происходит более одного раза, номер не имеет десятичной точки и этот символ является разделителем тысяч.
  • Если строка содержит ровно одну из них, последняя является десятичной точкой
  • Если строка содержит только одну точка/запятая, вам в значительной степени не повезло: 123.456 или 123,456 может быть номером 123456 или 123.456. Однако с номером 123.45 - то есть числом цифр после того, как разделитель потенциальных тысяч не будет кратным трем - вы можете предположить, что это десятичная точка.
+0

Я не хочу делать любой эвристический анализ на самом тексте, потому что это может привести к непредсказуемым результатам. Это есть библиотека, чтобы сделать это, это было бы моим вариантом. – gorodechnyj