簡體   English   中英

在Python中將字符串轉換為帶十進制的整數

[英]Convert a string to integer with decimal in Python

我有一個格式為 Python 的字符串:'nn.nnnnn',我想將其轉換為整數。

直接轉換失敗:

>>> s = '23.45678'
>>> i = int(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '23.45678'

我可以使用以下方法將其轉換為小數:

>>> from decimal import *
>>> d = Decimal(s)
>>> print d
23.45678

我也可以在 '.' 上拆分,然后從零中減去小數,然后將其添加到整數中......哎呀。

但我更喜歡將它作為一個 int,沒有不必要的類型轉換或操作。

這個怎么樣?

>>> s = '23.45678'
>>> int(float(s))
23

或者...

>>> int(Decimal(s))
23

或者...

>>> int(s.split('.')[0])
23

我懷疑它會變得比那簡單得多,恐怕。 接受它並繼續前進。

你想要什么樣的舍入行為? 你把2.67變成3,還是2。如果你想用四舍五入,試試這個:

s = '234.67'
i = int(round(float(s)))

否則,只需執行以下操作:

s = '234.67'
i = int(float(s))
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24

您沒有指定是否要舍入...

你可以使用:

s = '23.245678'
i = int(float(s))

“轉換”僅在您從一種數據類型更改為另一種數據類型而不會丟失保真度時才有意義。 字符串表示的數字是一個浮點數,在被強制轉換為 int 時會失去精度。

您可能想要四舍五入(我希望數字不代表貨幣,因為這樣四舍五入會變得更加復雜)。

round(float('23.45678'))

如果要截斷值,其他人提到的表達式int(float(s))是最好的。 如果您想要舍入,則使用int(round(float(s))如果舍入算法與您想要的匹配(請參閱舍入文檔),否則您應該使用Decimal和一個如果其舍入算法。

round(float("123.789"))

會給你一個整數值,但一個浮點類型。 然而,對於 Python 的鴨子類型,實際的類型通常不是很相關。 這也會舍入您可能不想要的值。 將 'round' 替換為 'int',您將只截斷它並得到一個實際的 int。 像這樣:

int(float("123.789"))

但是,同樣,實際的“類型”通常並不那么重要。

我相信這是一個無用的錯誤,應該在 Python 中糾正。

int('2') --> 2 將字符串 '2' 轉換為整數 2。

int(2.7) --> 2 將 float 轉換為 int。

int('2.7')應該轉換為 2。例如,這就是 Perl 的工作方式。 是的,這一次做了兩件事。 它轉換字符串,當它發現它是一個浮點數表示時,它應該轉換為 int。

否則,為什么堅持float('2')應該工作? 它是一個整數字符串,因為沒有小數點。 所以它必須從一個整數的字符串直接轉換為浮點數。

我不知道,但也許有人可以回答 python 解釋器是否使用了所需的int(float(x)) ,如果它實際上經歷了首先轉換為 float 然后轉換為 int 的過程。 這將使這個錯誤更加重要,需要更正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM