แปลงสตริงตัวเลข str เป็นจำนวน int ลอยใน Python

ธุรกิจ

หากคุณต้องการแปลงสตริงของตัวเลขเป็นค่าตัวเลขใน Python ให้ใช้ int() เพื่อแปลงเป็นจำนวนเต็มและ float() เพื่อแปลงเป็นตัวเลขทศนิยม

มีการอธิบายสิ่งต่อไปนี้พร้อมกับโค้ดตัวอย่าง

  • การใช้งานพื้นฐาน
    • แปลงสตริงตัวเลขเป็นจำนวนเต็ม:int()
    • แปลงสตริงตัวเลขเป็นตัวเลขทศนิยม:float()
  • การใช้งานพิเศษ
    • แปลงสตริงในรูปแบบไบนารี ฐานแปด และฐานสิบหกเป็นตัวเลข
    • แปลงสตริงในรูปแบบเลขชี้กำลังเป็นค่าตัวเลข
    • แปลงสตริงตัวเลขอารบิกแบบเต็มความกว้างเป็นตัวเลข
    • แปลงสตริงของตัวอักษรจีนเป็นตัวเลข

ในการแปลงค่าตัวเลขเป็นสตริง ให้ใช้ str()

หากคุณต้องการแปลงตัวเลขหรือสตริงเป็นรูปแบบต่างๆ ให้ใช้ฟังก์ชัน format() หรือวิธีสตริง str.format() จากนั้นคุณสามารถแปลงเป็น 0-fill, binary, octal, hexadecimal, exponential notation ฯลฯ ดูรายละเอียดในบทความต่อไปนี้

นอกจากนี้ยังสามารถแปลงรายการสตริงเป็นรายการตัวเลขได้อีกด้วย ดูบทความต่อไปนี้สำหรับรายละเอียด

แปลงสตริงตัวเลขเป็นจำนวนเต็ม:int()

คุณสามารถใช้ int() เพื่อแปลงสตริงของตัวเลขเป็นตัวเลขประเภทจำนวนเต็ม

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

ทศนิยม รวมทั้งจุดทศนิยม และสตริงที่คั่นด้วยเครื่องหมายจุลภาคจะส่งผลให้เกิด ValueError

# print(int('1.23'))
# ValueError: invalid literal for int() with base 10: '1.23'

# print(int('10,000'))
# ValueError: invalid literal for int() with base 10: '10,000'

สตริงที่คั่นด้วยเครื่องหมายจุลภาคสามารถแปลงได้โดยการลบเครื่องหมายจุลภาค (แทนที่ด้วยสตริงว่าง) โดยใช้เมธอดแทนที่ ()

print(int('10,000'.replace(',', '')))
# 10000

แปลงสตริงตัวเลขเป็นตัวเลขทศนิยม:float()

float() สามารถใช้เพื่อแปลงสตริงของตัวเลขเป็นประเภทตัวเลขทศนิยม

print(float('1.23'))
print(type(float('1.23')))
# 1.23
# <class 'float'>

สตริงที่ไม่มีส่วนจำนวนเต็มจะถูกแปลงโดยการเสริมส่วนจำนวนเต็มด้วย 0

print(float('.23'))
# 0.23

สตริงจำนวนเต็มจะถูกแปลงเป็นตัวเลขทศนิยมด้วย

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

แปลงสตริงในรูปแบบไบนารี ฐานแปด และฐานสิบหกเป็นตัวเลข

หากระบุ radix เป็นอาร์กิวเมนต์ที่สองของ int() สตริงสามารถแปลงเป็น int จำนวนเต็มได้โดยพิจารณาว่าเป็นไบนารี ฐานแปด เลขฐานสิบหก เป็นต้น

print(int('100', 2))
print(int('100', 8))
print(int('100', 16))
# 4
# 64
# 256

ดังในตัวอย่างก่อนหน้านี้ หากละเว้น ตัวเลขจะถือเป็นตัวเลขทศนิยม

print(int('100', 10))
print(int('100'))
# 100
# 100

หากตั้งค่าฐานเป็น 0 การแปลงจะขึ้นอยู่กับคำนำหน้าสตริง ดูคำนำหน้าสตริงด้านล่าง

  • 0b
    • 0B
  • 0o
    • 0O
  • 0x
    • 0X
print(int('0b100', 0))
print(int('0o100', 0))
print(int('0x100', 0))
# 4
# 64
# 256

คำนำหน้าและตัวอักษรฐานสิบหกอาจเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก

print(int('FF', 16))
print(int('ff', 16))
# 255
# 255

print(int('0xFF', 0))
print(int('0XFF', 0))
print(int('0xff', 0))
print(int('0Xff', 0))
# 255
# 255
# 255
# 255

ดูบทความต่อไปนี้สำหรับข้อมูลเกี่ยวกับการแปลงระหว่างเลขฐานสอง ฐานแปด และฐานสิบหกและสตริง

แปลงสตริงในรูปแบบเลขชี้กำลังเป็นค่าตัวเลข

สตริงในรูปแบบเลขชี้กำลังสามารถแปลงโดยตรงเป็นประเภท float ด้วย float()

print(float('1.23e-4'))
print(type(float('1.23e-4')))
# 0.000123
# <class 'float'>

print(float('1.23e4'))
print(type(float('1.23e4')))
# 12300.0
# <class 'float'>

e ตัวพิมพ์เล็กอาจเป็นตัวพิมพ์ใหญ่ E

print(float('1.23E-4'))
# 0.000123

แปลงสตริงตัวเลขอารบิกแบบเต็มความกว้างเป็นตัวเลข

ตัวเลขอารบิกแบบเต็มความกว้างสามารถแปลงเป็นตัวเลขได้โดยตรงโดยใช้ int() หรือ float()

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

อย่างไรก็ตาม หากสัญลักษณ์ เช่น เครื่องหมายจุดลบและจุดทศนิยมเป็นอักขระแบบเต็มความกว้าง จะมีการสร้าง ValueError

# print(float('ー1.23'))
# ValueError: could not convert string to float: '1.23'

สามารถแปลงตัวเลขได้โดยไม่มีปัญหาหากเป็นอักขระแบบเต็มความกว้าง แต่จุดลบและจุดทศนิยมเป็นอักขระแบบครึ่งความกว้าง การแปลงสามารถทำได้โดยการแทนที่สัญลักษณ์เต็มความกว้างด้วยสัญลักษณ์ครึ่งความกว้างโดยใช้วิธีการแทนที่ ()

print(float('-1.23'))
# -1.23

print(float('ー1.23'.replace('ー', '-').replace('.', '.')))
# -1.23

แปลงสตริงของตัวอักษรจีนเป็นตัวเลข

ฟังก์ชัน unicodedata.numeric() ในโมดูล unicodedata สามารถใช้เพื่อแปลงอักขระภาษาจีน Unicode ตัวเดียวให้เป็นตัวเลขประเภทตัวเลขทศนิยม

หากไม่ใช่ตัวอักษรเดียว ข้อผิดพลาดจะเกิดขึ้น นอกจากนี้ อักขระที่ไม่ใช่ตัวเลขจะทำให้เกิดข้อผิดพลาด

import unicodedata

print(unicodedata.numeric('五'))
print(type(unicodedata.numeric('五')))
# 5.0
# <class 'float'>

print(unicodedata.numeric('十'))
# 10.0

print(unicodedata.numeric('参'))
# 3.0

print(unicodedata.numeric('億'))
# 100000000.0

# print(unicodedata.numeric('五十'))
# TypeError: numeric() argument 1 must be a unicode character, not str

# print(unicodedata.numeric('漢'))
# ValueError: not a numeric character