تبدیل رشته به عدد اعشاری (Float) #
چند روش برای تبدیل رشته به اعشار در پایتون وجود دارد. با این حال، ما در این مقاله فقط بر روی روشهای زیر تمرکز خواهیم کرد.
- با استفاده از
float()تابع. - با استفاده از
Decimal()تابع. - استفاده از ماژول ‘ast’ برای ارزیابی تحتاللفظی.
- تبدیل رشته به اعشار با استفاده از Numpy
- با استفاده از
json.loads(). - با استفاده از یک تابع سفارشی.
حالا بیایید هر یک از این روشها را با جزئیات بیشتری بررسی کنیم.
استفاده از تابع float() #
استفاده از این float()تابع رایجترین روش برای تبدیل رشته به اعشار در پایتون است . علاوه بر این، این یک تابع داخلی است، به این معنی که با نصب استاندارد پایتون همراه است. میتوانید یک مقدار رشتهای را به عنوان آرگومان به آن ارسال کنید و عدد اعشاری مربوطه را دریافت کنید. برای درک بهتر این موضوع، به مثال زیر نگاهی بیندازید.
string_number = "13.86"
float_number = float(string_number)
print(float_number)
print(type(float_number))
خروجی:

همانطور که میبینید، تابع float مقداری از را برمیگرداند <class 'float'>. با این حال، اگر مقدار ورودی ارسالی به آن یک عدد اعشاری معتبر نباشد، تابع یک خطای ValueError برمیگرداند. برای مثال، به بلوک کد زیر نگاه کنید.
string_number = "invalid float"
float_number = float(string_number)
print(float_number)
print(type(float_number))
خروجی:

بنابراین، استفاده از مکانیزمهای مناسب مدیریت خطا مانند بلوکهای try-except هنگام کدنویسی بسیار مهم است. این رویکرد بسیار مفید است، به خصوص هنگام تبدیل ورودیهای کاربر، زیرا نمیتوانید پیشبینی کنید که کاربر چه نوع ورودیای وارد خواهد کرد. مثال زیر نحوه استفاده از این float()تابع برای ورودیهای کاربر را به بهترین شکل نشان میدهد.
user_input = input("Enter a number: ")
try:
float_number = float(user_input)
print("Valid float:", float_number)
except ValueError:
print("This is not a valid floating-point number.")
استفاده از تابع Decimal() #
در پایتون، برای سناریوهایی که نیاز به دقت و صحت بالا در محاسبات ممیز شناور دارند، Decimal()میتوان از تابع ماژول اعشاری استفاده کرد. نکته مهم در مورد این Decimal()تابع این است که در مقایسه با تابع داخلی float()که گاهی اوقات میتواند به دلیل نمایش ممیز شناور دودویی، خطای کوچکی ایجاد کند، دقیقتر است. این تابع یک رشته یا یک عدد را به عنوان آرگومان میگیرد و یک شیء اعشاری را برمیگرداند که دقیقاً عدد اعشاری مشخص شده را نشان میدهد.
from decimal import Decimal
string_number = "13.86"
decimal_number = Decimal(string_number)
print(decimal_number)
print(type(decimal_number))
خروجی:

همانطور که در تصویر بالا نشان داده شده است، تابع Decimal() مقداری از را برمیگرداند <class 'decimal.Decimal'>. اگر مقدار ورودی ارسالی به Decimal() یک عدد معتبر نباشد، مشابه float()تابع، خطای ValueError یا InvalidOperation را ایجاد میکند.
این Decimal()تابع به ویژه زمانی مفید است float()که به دقت بیشتری در محاسبات اعشاری، مانند محاسبات مالی یا محاسبات علمی، نیاز دارید.
استفاده از ماژول ‘ast’ برای ارزیابی تحتاللفظی #
روش دیگر برای تبدیل یک رشته به اعشاری، استفاده از ماژول ast (Abstract Syntax Trees) است. هدف اصلی این ast.literal_eval()تابع، ارزیابی رشتههای حاوی لیترالهای پایتون است. با این حال، میتوان از آن برای تبدیل رشتهها به اعشاری نیز استفاده کرد، مشروط بر اینکه رشتههای ارسالی به آن فقط حاوی یک عدد اعشاری باشند. در چنین مواردی، این روش شیء اعشاری متناظر پایتون را برمیگرداند. بیایید مثالی از ast.literal_eval()عملکرد تابع را ببینیم.
import ast
input_string = "33.3"
float_number = ast.literal_eval(input_string)
print(float_number)
print(type(float_number))
خروجی:

همانطور که در مثال بالا نشان داده شده است، ast.literal_eval()تابع رشته “۳۳.۳” را به عنوان یک عدد اعشاری ارزیابی میکند و نوع داده float را ارائه میدهد.
تبدیل رشته به اعشار با Numpy #
به عنوان یک توسعهدهنده پایتون، ممکن است قبلاً نام NumPy را شنیده باشید . این یک کتابخانه محبوب پایتون برای محاسبات علمی است. این کتابخانه به طور گسترده برای عملیات ریاضی پیشرفته، به خصوص هنگام کار با آرایهها و ماتریسها، استفاده میشود. اگر قصد دارید از NumPy برای پروژه بعدی خود استفاده کنید، ضروری است که بدانید چگونه رشتهها را با این کتابخانه به اعشار تبدیل کنید.
Numpy شامل یک نوع داده به نام numpy.float64 است که اعداد اعشاری با دقت مضاعف را نشان میدهد. همچنین میتوانید از این نوع داده برای تبدیل مقادیر رشتهای به اعداد اعشاری استفاده کنید. در اینجا مثالی از نحوه انجام این کار آورده شده است.
import numpy as np
my_value = "64.9512"
float_number = np.float64(my_value)
print(float_number)
print(type(float_number))
خروجی:

این قطعه کد رشته “۶۴.۹۵۱۲” را به یک متغیر float64 از نوع NumPy تبدیل میکند. NumPy به طور خاص برای مدیریت آرایههایی از مقادیر مفید است، و این آن را به انتخابی عالی برای تبدیل چندین رشته به اعداد اعشاری در زمینه محاسبات عددی تبدیل میکند.
مشابه تابع float()، استفاده از numpy.float64 برای تبدیل رشتهای که نشاندهنده یک عدد اعشاری معتبر نیست، منجر به خطای ValueError خواهد شد.
استفاده از json.loads() #
این یکی دیگر از سادهترین روشها برای تبدیل رشته به اعشار در پایتون است. با این حال، بیایید برای هدف این آموزش، آن را نیز بررسی کنیم. این روش هنگام کار با دادههای JSON مفید است، که در تعاملات API بسیار رایج است.
این json.loads()عملکرد ماژول JSON پایتون هنگام کار با دادهها در قالب JSON ضروری است. این عملکرد با فراهم کردن امکان تبدیل رشتهای با قالب JSON به یک دیکشنری پایتون، مزیت قابل توجهی را ارائه میدهد. همچنین دستکاری آسان دادهها را تسهیل میکند.
وقتی مقادیر JSON حاوی اعداد اعشاری را ارسال میکنید، json.loads()به طور خودکار آنها را به نوع داده float تبدیل میکند. در اینجا یک مثال آورده شده است.
import json
json_string = '{"temperature": 23.5}'
python_data = json.loads(json_string)
temperature = python_data['temperature']
print(temperature)
print(type(temperature))
خروجی:

این مثال نحوهی json.loads()تجزیهی یک رشتهی JSON و تبدیل مقدار عددی “۲۳.۵” از نوع رشته به عدد اعشاری (float) را نشان میدهد. اگر رشتهی JSON ساختار نادرستی داشته باشد یا حاوی مقادیر عددی با قالببندی نامناسب باشد، این تابع خطای json.JSONDecodeError را ایجاد میکند.
با استفاده از یک تابع سفارشی #
گاهی اوقات، ممکن است با موقعیتهایی مواجه شوید که استفاده از توابع داخلی مانند float()برای تبدیل رشته به اعشار مناسب نباشد. در چنین مواردی، میتوانید با ایجاد یک تابع سفارشی برای دستیابی به همان هدف، انعطافپذیری لازم را به دست آورید. اگرچه این روش کمی کار بیشتری را میطلبد، اما امکان مدیریت خطای خاص یا منطق تبدیل را فراهم میکند که توابع استاندارد فاقد آن هستند.
بیایید نگاهی به یک قطعه کد نمونه برای پیادهسازی منطق سفارشی برای تبدیل رشته به اعشار بیندازیم.
def string_to_float(string):
number = 0.0
# Check if the string represents a negative number
is_negative = string[0] == '-'
# Find the position of the decimal point
decimal_position = string.find('.')
# If there is no decimal point, treat it as an integer part
if decimal_position == -1:
decimal_position = len(string)
# Convert the integer part
for char in string[:decimal_position]:
if char.isdigit():
number = number * 10 + (ord(char) - ord('0'))
# Convert the fractional part
fractional_part = 0.1
for char in string[decimal_position+1:]:
if char.isdigit():
number += (ord(char) - ord('0')) * fractional_part
fractional_part *= 0.1
# Apply negative sign if needed
return -number if is_negative else number
# Example usage
string_number = "123.45"
converted_number = string_to_float(string_number)
print(converted_number)
print(type(converted_number))
خروجی:

کد بالا با توضیحات مربوط به بلوکهای کد خاص، بسیار گویا است. اگر شما یک توسعهدهنده پایتون هستید، دانستن نحوه نوشتن یک تابع سفارشی برای تبدیل رشته به اعشار ضروری است. در برخی موارد، شما باید با دادههای عددی جاسازیشده در فایلهای متنی سر و کار داشته باشید. این فایلها ممکن است دارای یک جداکننده غیراستاندارد برای نقطه اعشار باشند، مانند کاما (',')به جای نقطه ('.'). این وضعیت هنگام کار با سیستمهای محلی مختلف متفاوت از محلیهای مبتنی بر انگلیسی بسیار رایج است. در چنین مواردی، میتوانید یک تابع سفارشی برای تفسیر صحیح این قالبها ایجاد کنید.
نتیجه گیری #
تبدیل رشته به اعشار یک کار معمولی است که هر برنامهنویس باید انجام دهد. این مقاله شش روش مختلف برای تبدیل یک رشته به اعشار را شرح داد. هر روش از نظر کارایی، امنیت و قابلیت سفارشیسازی متفاوت است. در اینجا، ما همچنین در مورد زمان استفاده از هر روش بر اساس معیارهای مختلف بحث کردیم. با تمرین این روشها، میتوانید آنها را در سناریوهای پیچیدهتری که در سفر توسعه خود با آنها روبرو خواهید شد، به کار ببرید. کدنویسی خوبی داشته باشید!
