Как проверить, может ли строка быть подвергнута типу для float в Python?

Есть ли какая-то функция типа str.isnumeric но применима для float?

 '13.37'.isnumeric() #False 

Я все еще использую это:

 def isFloat(string): try: float(string) return True except ValueError: return False 

6 Solutions collect form web for “Как проверить, может ли строка быть подвергнута типу для float в Python?”

Как говорит Имран, ваш код абсолютно прекрасен, как показано.

Тем не менее, он поощряет клиентов isFloat вниз по пути «Look Before You Leap» вместо более простого пути «Путь isFloat прощения, чем разрешение» Pythonic.

Для Pythonic больше полагается, что у них есть строка, представляющая float, но она будет готова обрабатывать исключение, которое будет выбрано, если это не так.

Этот подход также имеет хороший побочный эффект преобразования строки в float один раз вместо двух.

Небольшое обобщение:

 def strType(var): try: if int(var) == float(var): return 'int' except: try: float(var) return 'float' except: return 'str' 

Ваш код абсолютно прекрасен. Решения на основе Regex скорее всего подвержены ошибкам.

Быстрое тестирование с помощью timeit показывает float(str_val) действительно быстрее, чем re.match()

 >>> timeit.timeit('float("-1.1")') 1.2833082290601467 >>> timeit.timeit(r"pat.match('-1.1')", "import re; pat=re.compile(r'^-?\d*\.?\d+(?:[Ee]-?\d+)?$');") 1.5084138986904527 

И используемое выше выражение не выдает один крайный аргумент, он не может соответствовать '-1.' , хотя float() радостью преобразует его в соответствующее значение float.

Однако есть уловка: float ('nan') возвращает nan, исключение исключено;)

Расширение результатов @ Imran:

 >>> timeit('float("-1.1")', number=10000000) 1.365271806716919 >>> timeit(r"isfloat('-1.1')", """def isfloat(s): t = s.partition('.'); return t[1] and t[0].isdigit() and (not t[2] or t[2].isdigit());""", number=10000000) 2.565232992172241 >>> timeit(r"pat.match('-1.1')", "import re; pat=re.compile(r'^-?\d*\.?\d+( ...: ?:[Ee]-?\d+)?$');", number=10000000) 3.258622169494629 

Мое решение partition намного быстрее, чем регулярное выражение, но медленнее, чем float ; однако имеет то преимущество, что не поднимает ошибок (поэтому вы можете использовать его, например, в виде понятий).

Это обрабатывает граничные условия, такие как 1. , но не специализации, такие как NaN .

isinstance(myVariable, float) будет работать, если вы тестируете переменную с плавающей запятой.

Редактировать: слишком быстро говорили, не понимали, что вы пытались получить.

  • Почему он использует плавающий элемент в этом примере?
  • Точность плавания Python без целочисленной точности после десятичной точки
  • Проверка того, является ли float эквивалентом целочисленного значения в python
  • Возможно иметь `` a <b и not (a-b <0) `` с поплавками
  • Правильный способ эмулировать одинаковую точку с плавающей запятой в python?
  • Как получить случайное число между диапазоном с плавающей запятой?
  • Как проверить, является ли значение float целым числом
  • возможно ли найти случайные поплавки в диапазоне в python?
  • Python - лучший язык программирования в мире.