2013-05-30 74 views
1

我從一個CSV隨機行加載到一個類。我需要系統將這些值中的一個看作數字,而不是用於計算的字符串。這適用於整數。不能在分數上使用int。解決方法? Python

class Weapon: 
    def __init__ (self, name, value, damage, weight, properties, catagory, description): 
     self.name = name 
     self.value = int(value) 
     self.damage = damage 
     self.weight = weight 
     self.properties = properties 
     self.catagory = catagory 
     self.description = description 

我在那裏,如果我嘗試在一小部分(例如0.05)使用int一個問題,我得到以下錯誤:

self.value = int(value) 
ValueError: invalid literal for int() with base 10: '0.05' 

我能使用int來代替,或者還有作爲int,讓它工作?

+3

如果'value'需要是一個整數,它可能是值得考慮的浮點值是如何被傳遞到'武器.__ init__'擺在首位。 – chepner

+1

請記住,問題是''​​0.05''不是一個分數。這是一個字符串。你正在做的和'int('Hello,World!')'一樣。 –

+0

相反,我會說這裏的問題是一個分數不是一個整數。在任何情況下,期望int('0.05')'工作可能是不合理的。 :-) –

回答

4

使用int(float(value))首先將字符串解析爲float,然後轉換爲int

當然不過,隨後0.05將減少到0。如果這對你不好,只需使用float(value)即可。

+0

完美的作品!謝謝!順便說一句,我會接受什麼時候系統允許我。 – Simkill

1

使用

from decimal import Decimal 
int(Decimal(value)) 

不要使用花車,彩車是醜陋的。

+1

花車通常很好...但你是對的十進制的有精確的布萊恩 –

+3

爲什麼使用十進制,如果你要四捨五入嗎? –

+0

@TimPietzcker:好吧,如果這個數字太大而不能適應浮動,它們可能會給出不同的結果。 (「Large」在這裏可能是錯誤的詞:我的意思是「小數點左邊有太多有效數字」。) – DSM

相關問題