Μετατροπή αλφαριθμητικής συμβολοσειράς str σε αριθμό int, float στην Python

Επιχείρηση

Αν θέλετε να μετατρέψετε μια συμβολοσειρά αριθμών σε αριθμητικές τιμές στην Python, χρησιμοποιήστε την int() για να μετατρέψετε σε ακέραιους αριθμούς και την float() για να μετατρέψετε σε αριθμούς κινητής υποδιαστολής.

Τα παρακάτω εξηγούνται εδώ, μαζί με δείγμα κώδικα.

  • Βασική χρήση
    • Μετατροπή αριθμητικών συμβολοσειρών σε ακέραιους αριθμούς:int()
    • Μετατροπή μιας συμβολοσειράς αριθμών σε αριθμούς κινητής υποδιαστολής:float()
  • Ειδική χρήση
    • Μετατρέπει συμβολοσειρές σε δυαδικό, οκταδικό και δεκαεξαδικό συμβολισμό σε αριθμούς
    • Μετατρέπει συμβολοσειρές σε εκθετικό συμβολισμό σε αριθμητικές τιμές
    • Μετατροπή σειρών αραβικών αριθμών πλήρους πλάτους σε αριθμούς
    • Μετατροπή μιας συμβολοσειράς κινεζικών χαρακτήρων σε αριθμούς

Για να μετατρέψετε μια αριθμητική τιμή σε συμβολοσειρά, χρησιμοποιήστε την str().

Αν θέλετε να μετατρέψετε αριθμούς ή συμβολοσειρές σε διάφορες μορφές, χρησιμοποιήστε τη συνάρτηση format() ή τη μέθοδο συμβολοσειρών str.format(). Στη συνέχεια, μπορείτε να μετατρέψετε σε 0-fill, δυαδικό, οκταδικό, δεκαεξαδικό, εκθετικό συμβολισμό κ.λπ. Ανατρέξτε στο ακόλουθο άρθρο για λεπτομέρειες.

Μπορεί επίσης να μετατρέψει μια λίστα συμβολοσειρών σε μια λίστα αριθμών. Ανατρέξτε στο ακόλουθο άρθρο για λεπτομέρειες.

Μετατροπή αριθμητικών συμβολοσειρών σε ακέραιους αριθμούς: 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'

Οι συμβολοσειρές που χωρίζονται με κόμμα μπορούν να μετατραπούν αφαιρώντας το κόμμα (αντικαθιστώντας το με μια κενή συμβολοσειρά) χρησιμοποιώντας τη μέθοδο replace().

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

Εάν το radix έχει οριστεί σε 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'

Οι αριθμοί μπορούν να μετατραπούν χωρίς προβλήματα αν είναι χαρακτήρες πλήρους πλάτους, αλλά τα μείον και τα δεκαδικά σημεία είναι χαρακτήρες μισού πλάτους.Η μετατροπή είναι δυνατή με την αντικατάσταση των συμβόλων πλήρους πλάτους με σύμβολα μισού πλάτους χρησιμοποιώντας τη μέθοδο replace().

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