How to convert a string to a float in Python

Learn how to convert a string to a float in Python. Explore various methods, real-world applications, and common error-handling techniques.

How to convert a string to a float in Python
Published on: 
Thu
Feb 5, 2026
Updated on: 
Tue
Feb 24, 2026
The Replit Team Logo Image
The Replit Team

To convert a string to a float in Python is a common need for handling numerical data from files or user input. The built-in float() function makes this process straightforward.

You will learn the core technique with float(), discover practical tips for real-world applications, and get advice to debug common errors that may arise during the conversion process.

Using the float() function

string_number = "42.5"
float_number = float(string_number)
print(f"Original string: {string_number}")
print(f"Converted float: {float_number}")
print(f"Type: {type(float_number)}")--OUTPUT--Original string: 42.5
Converted float: 42.5
Type: <class 'float'>

The code demonstrates the direct application of Python's float() constructor. It takes a string that represents a number, like "42.5", and converts it into a true floating-point number that your program can use for calculations.

The final line using type() is the crucial confirmation. It verifies that the variable float_number is no longer a sequence of characters but a numeric type—specifically <class 'float'>. This distinction is fundamental because you can't perform arithmetic on a string, but you can on a float.

Standard conversion techniques

While direct conversion is great for perfect strings, real-world data often requires more robust techniques for handling errors and processing values in bulk.

Handling conversion errors with try-except

def safe_float_conversion(string_value):
   try:
       return float(string_value)
   except ValueError:
       return None
       
print(safe_float_conversion("42.5"))
print(safe_float_conversion("invalid"))--OUTPUT--42.5
None

Real-world data is messy, and not every string can be converted to a float. Attempting to convert a non-numeric string like "invalid" directly with float() will raise a ValueError and crash your script. The try-except block is your safety net against this.

  • The try block attempts the potentially risky operation—in this case, the conversion.
  • If a ValueError occurs, the except block catches it and returns None, allowing your program to continue running smoothly.

This approach lets you gracefully handle bad data instead of letting it halt your application.

Converting strings with special characters

price = "$1,234.56"
clean_price = price.replace("$", "").replace(",", "")
float_price = float(clean_price)
print(f"Original price: {price}")
print(f"Converted price: {float_price}")--OUTPUT--Original price: $1,234.56
Converted price: 1234.56

You'll often find that numerical strings contain extra characters like currency symbols or commas, which cause float() to fail. The solution is to "clean" the string before attempting the conversion. The code does this by chaining the replace() method to strip all unwanted characters in one go.

  • First, price.replace("$", "") removes the dollar sign.
  • The result is then passed to .replace(",", "") to remove the comma.

This process leaves a clean string like "1234.56" that float() can easily handle.

Converting multiple strings using map() and list comprehension

string_numbers = ["10.5", "20.3", "30.1", "40.9"]
# Using map
float_numbers_map = list(map(float, string_numbers))
# Using list comprehension
float_numbers_comp = [float(num) for num in string_numbers]
print(float_numbers_map)--OUTPUT--[10.5, 20.3, 30.1, 40.9]

When you need to convert a whole list of strings, writing a loop for each item is inefficient. Python offers two elegant one-liners for this: the map() function and list comprehensions. Both methods apply the float() function to every string in your list, giving you a new list of floats.

  • The map(float, string_numbers) approach applies the float() function to each element. You then convert the resulting map object into a list.
  • A list comprehension, [float(num) for num in string_numbers], achieves the same goal. Many developers find this syntax more direct and readable.

Advanced conversion techniques

When standard methods aren't enough, you'll need more advanced strategies for handling tricky data like international number formats or values embedded in messy text.

Handling international number formats

def convert_international_format(number_str):
   # Convert European format (1.234,56) to US format (1234.56)
   if "," in number_str and "." in number_str:
       number_str = number_str.replace(".", "").replace(",", ".")
   # Convert format with just comma as decimal (1234,56)
   elif "," in number_str:
       number_str = number_str.replace(",", ".")
   return float(number_str)

print(convert_international_format("1.234,56"))  # European format
print(convert_international_format("1234,56"))   # Alternative format--OUTPUT--1234.56
1234.56

Since numbers are formatted differently around the world, you can't always pass a string directly to float(). This function handles strings where a comma is used as the decimal separator, a common practice in many countries.

  • It first checks for formats like "1.234,56". The code strips the period used as a thousands separator and then swaps the comma for a decimal point.
  • If only a comma is present, as in "1234,56", it simply replaces the comma with a period.

This pre-processing step standardizes the string, ensuring the final conversion to a float succeeds.

Extracting and converting numbers with re

import re

text = "The price is somewhere between $42.50 and $50.75"
# Extract all numbers with a decimal point
numbers = re.findall(r'\d+\.\d+', text)
# Convert to floats
float_numbers = [float(num) for num in numbers]
print(float_numbers)--OUTPUT--[42.5, 50.75]

When numbers are buried inside longer strings, Python's re module for regular expressions is the perfect tool. The re.findall() function scans the text and extracts all substrings that match a specific pattern you define.

  • The pattern r'\d+\.\d+' tells Python to find sequences of one or more digits (\d+), followed by a literal dot (\.), and then more digits.
  • It returns a list of all matching number strings. You can then convert these to floats using a list comprehension, efficiently pulling numerical data from unstructured text.

Creating a custom converter class

class FloatConverter:
   def __init__(self, default=None, strip_chars="$£€¥ "):
       self.default = default
       self.strip_chars = strip_chars
       
   def convert(self, value):
       if not value:
           return self.default
       for char in self.strip_chars:
           value = value.replace(char, "")
       value = value.replace(",", ".")
       try:
           return float(value)
       except ValueError:
           return self.default

converter = FloatConverter(default=0.0)
print(converter.convert("$42.50"))
print(converter.convert("€ 1,234"))
print(converter.convert("invalid"))--OUTPUT--42.5
1234.0
0.0

For complex and repeated conversions, creating a custom FloatConverter class is a powerful approach. It bundles all the logic for cleaning and converting strings into a single, reusable object. This is much cleaner than rewriting the same logic multiple times across your application.

  • The __init__ method lets you configure the converter when you create it, setting a default value for errors and defining which characters to strip.
  • The convert method handles the entire process. It cleans the string, standardizes decimal formats, and uses a try-except block to safely return either the float or your default value.

Move faster with Replit

Replit is an AI-powered development platform that transforms natural language into working applications. Describe what you want to build, and Replit Agent creates it—complete with databases, APIs, and deployment.

For the string-to-float conversion techniques we've covered, Replit Agent can turn them into production-ready applications.

  • Build a financial data parser that cleans CSV files by removing currency symbols and converting price strings to floats for analysis.
  • Create a data ingestion tool that automatically standardizes and converts numerical data from different international formats.
  • Deploy a web scraper that extracts product prices from text descriptions and converts them into a structured list of floats.

Describe your app idea, and Replit Agent writes the code, tests it, and fixes issues automatically, all in your browser.

Common errors and challenges

Even with the right techniques, you might run into a few common pitfalls when converting strings to floats.

You may notice that calculations involving floats don't always produce the exact result you'd expect. This isn't a bug in Python; it's a fundamental aspect of how computers store decimal numbers in binary, which can lead to tiny rounding discrepancies. For example, adding 0.1 and 0.2 results in a number that's infinitesimally close to, but not exactly, 0.3.

While these small errors are often negligible, they can compound in complex calculations. If you're working with financial data or any application where absolute precision is non-negotiable, use Python's Decimal module. It's designed to represent decimal numbers exactly as you'd write them on paper, avoiding floating-point inaccuracies.

A direct result of precision issues is that comparing two floats for equality using the == operator is unreliable. Two numbers that appear identical might differ by a tiny, invisible fraction, causing a direct comparison to fail when you expect it to succeed. The correct approach is to check if the numbers are "close enough" by using Python's built-in math.isclose() function, which handles this comparison safely.

As we've seen, trying to convert a non-numeric string with float() raises a ValueError. While a try-except block is the standard way to catch this error, the real challenge is deciding what your program should do next. Returning None clearly signals a failed conversion, but in other cases, a default value like 0.0 might be more practical. The key is to handle invalid data deliberately instead of letting an error crash your script.

Debugging precision issues with float() calculations

Floating-point math can be counterintuitive. Because computers store these numbers in binary, simple arithmetic doesn't always yield the exact result you'd expect. This can lead to subtle bugs where values that look identical fail a direct comparison with the == operator.

The following code snippet illustrates this problem in action. Notice how adding two simple floats and comparing the sum to the expected value returns a surprising result.

price1 = float("10.1")
price2 = float("10.2")
total = price1 + price2
print(f"Total: {total}")
print(f"Expected: 20.3")
print(f"Equal check: {total == 20.3}")

The == check fails because floating-point inaccuracies mean the sum of 10.1 and 10.2 isn't exactly 20.3 in binary. The next example shows how to correctly check if these values are close enough to be considered equal.

price1 = float("10.1")
price2 = float("10.2")
total = price1 + price2
print(f"Total (formatted): {total:.1f}")
print(f"Equal check (rounded): {round(total, 1) == 20.3}")

The fix is to round the result to a known number of decimal places before comparing it. This effectively ignores the tiny precision errors from the binary calculation, allowing the == operator to work as you'd expect.

  • The code uses round(total, 1) to match the precision of the expected value, 20.3. This is a reliable strategy for any situation where you need to compare floats after performing arithmetic, such as in financial calculations or data validation.

Troubleshooting float() comparison problems

Directly comparing floats with the == operator is a frequent source of bugs. It's not a flaw in Python but a consequence of how computers store decimal numbers, which can introduce tiny, invisible rounding errors. The following code shows this in action.

result = float("0.1") + float("0.2")
expected = 0.3
print(f"Result: {result}")
print(f"Equal to 0.3? {result == expected}")

The code adds two floats, but the result isn't precisely what you'd expect on paper. This causes the equality check with == to fail. The following code shows how to reliably compare these values.

import math

result = float("0.1") + float("0.2")
expected = 0.3
print(f"Result: {result}")
print(f"Close to 0.3? {math.isclose(result, expected, abs_tol=1e-10)}")

The solution is to use Python's math.isclose() function. It sidesteps the unreliability of the == operator by checking if two numbers are close enough to be considered equal, rather than identical.

  • This function is your go-to for comparing floats, especially after any arithmetic.
  • It lets you define an acceptable tolerance, like abs_tol=1e-10, to account for tiny floating-point inaccuracies and prevent unexpected comparison failures.

Handling invalid values when using float()

When your data contains non-numeric strings, a direct conversion with float() will fail. This common scenario raises a ValueError and halts your program. The following code demonstrates what happens when you try to convert a list containing an invalid string.

values = ["10.5", "invalid", "20.3", "30"]
converted = []

for value in values:
   converted.append(float(value))
   
print(f"Converted values: {converted}")

The for loop halts when float() encounters the non-numeric string "invalid", preventing any subsequent valid numbers from being processed. The following code demonstrates how to handle this gracefully without stopping the entire conversion.

values = ["10.5", "invalid", "20.3", "30"]
converted = []

for value in values:
   try:
       converted.append(float(value))
   except ValueError:
       converted.append(None)
   
print(f"Converted values: {converted}")

The solution wraps the float() conversion in a try-except block. This prevents a ValueError from crashing your program when it encounters non-numeric text like "invalid".

  • The try block attempts the conversion on each item.
  • If it fails, the except block appends None to your list, and the loop continues to the next item.

This pattern is essential when you're working with data from external sources like files or user input.

Real-world applications

Moving beyond the technical methods and common errors, you'll see these conversion skills are essential for everyday applications in e-commerce and data analysis.

Calculating discounts with float() in e-commerce

You can combine string cleaning with the float() function to build a practical tool for calculating percentage-based discounts on product prices.

def apply_discount(price_str, discount_percent):
   price = float(price_str.replace("$", ""))
   discounted_price = price * (1 - discount_percent/100)
   return f"${discounted_price:.2f}"

original_prices = ["$129.99", "$24.50", "$9.99"]
discount = 25  # 25% discount

for price in original_prices:
   print(f"{price} with {discount}% off: {apply_discount(price, discount)}")

The apply_discount function demonstrates a common workflow. It takes a price string like "$129.99" and a discount percentage, then prepares the string for math by removing the $ symbol before converting it to a float.

  • The core calculation, price * (1 - discount_percent/100), applies the percentage discount.
  • Finally, it formats the result back into a currency string with two decimal places, like "$97.49", using an f-string. The loop simply shows how you'd apply this logic to a list of products.

Converting and analyzing temperature data with float()

You can use the float() function to clean and analyze datasets with mixed units, such as converting temperature readings from both Celsius and Fahrenheit for analysis.

mixed_readings = ["22.5°C", "98.6°F", "37°C", "68.2°F"]

def convert_to_celsius(reading):
   value = float(reading.rstrip("°CF"))
   if reading.endswith("°F"):
       return (value - 32) * 5/9
   return value

celsius_readings = [convert_to_celsius(temp) for temp in mixed_readings]
print(f"Converted temperatures (°C): {[round(temp, 1) for temp in celsius_readings]}")
print(f"Average temperature: {sum(celsius_readings)/len(celsius_readings):.1f}°C")

This example shows how to process a dataset with inconsistent units. The convert_to_celsius function normalizes every temperature reading into a single, standard format (Celsius) so you can perform calculations on it.

  • It first isolates the numerical part of the string, like "22.5", and converts it to a float.
  • It then checks if the original reading was in Fahrenheit and, if so, converts it to Celsius.

This approach allows you to reliably analyze the entire collection of temperatures, such as by calculating the average.

Get started with Replit

Turn what you've learned into a real tool. Describe your idea to Replit Agent, like “create a data cleaning utility for financial CSVs” or “build a dashboard that converts and analyzes temperature data.”

The agent writes the code, tests for errors, and deploys your app from a single prompt. Start building with Replit and bring your idea to life.

Get started free

Create and deploy websites, automations, internal tools, data pipelines and more in any programming language without setup, downloads or extra tools. All in a single cloud workspace with AI built in.

Get started for free

Create & deploy websites, automations, internal tools, data pipelines and more in any programming language without setup, downloads or extra tools. All in a single cloud workspace with AI built in.