หากคุณต้องการแปลงสตริงของตัวเลขเป็นค่าตัวเลขใน 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