如何在 Python 中將字串轉換為浮點或整數

Jinku Hu 2023年1月30日
  1. 在 Python 中通過 float() 將字串轉換為浮點數
  2. 在 Python 中通過 int() 將字串轉換為 int
  3. 在 Python 中通過 ast.literal_eval 將字串轉換為 floatint
  4. 在 Python 中將字串轉換為浮點數時地本地化和逗號 , 情況
  5. 在 Python 中將字串轉換為 floatint 的不同方法的效能比較
如何在 Python 中將字串轉換為浮點或整數

本教程文章將介紹如何在 Python 中將字串轉換為浮點數 float() 或整數 int()

在 Python 中通過 float() 將字串轉換為浮點數

float() 將字串轉換為 float 數字,如果可能的話。

>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0

在 Python 中通過 int() 將字串轉換為 int

int() 如果給定的字串是整數的表示形式,則可以將字串轉換為整數。否則會引發 ValueError

>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'

如果給定的字串是浮點數的表示形式,float 則可以先將其轉換為,然後再將其轉換為 int

>>> int(float('111.0'))
111

在 Python 中通過 ast.literal_eval 將字串轉換為 floatint

ast.literal_eval(string) 安全地評估包含 Python 表示式的給定字串。它可以將字串自動地轉換為 floatint

>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111

在 Python 中將字串轉換為浮點數時地本地化和逗號 , 情況

如果字串表示形式中存在逗號 ,,則 float 轉換將引發 ValueError 異常。但是逗號是常規的用法,例如在美國或英國等國家/地區用作千位分隔符 111,111.22,或者在大多數歐洲國家/地區用作小數點 111,222

>>> float('111,111.22')
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    float('111,111')
ValueError: could not convert string to float: '111,111'

應該使用 locale 模組來設定語言環境資訊,然後 locale.atof() 函式可以根據語言環境設定將給定的字串解析為浮點數。

在美國/英國,逗號作為千位分隔符

>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0

如果給出正確的語言環境設定,則逗號 , 可以正確解釋。

還應注意的是,即使給定的字串表示形式是整數,轉換結果也始終是 float 型別。

在歐洲國家,逗號作為小數點

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222

111,222 可以正確轉換為 111.222111.111,222 也可以正確轉換為 111111.222,因為在荷蘭等歐洲國家/地區,. 用作千位分隔符。

在 Python 中將字串轉換為 floatint 的不同方法的效能比較

我們 timeit 用來檢查不同方法之間的效能表現。

>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917

ast.literal_eval() 方法比 float 方法慢得多。如果你只需要在 Python 中將字串轉換為 floatint,則 ast.literal_eval() 不是首選。ast.literal_eval() 在此應用程式中屬於過度設計,因為其主要目標應該是評估包含 Python 表示式的字串。

locale.atof() 也非常慢,因此僅當在美國或英國的約定字串中存在逗號時才使用它,或者點 . 表示千位分隔符,而逗號 , 在歐洲國家中表示小數點。換句話說,locale.atof() 如果確實需要,才應使用它。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - Python String