2011-07-13 331 views

回答

82
import math 
x = 1234.5678 
math.modf(x) # (0.5678000000000338, 1234.0) 
+1

完美!與負面效果很好!謝謝 –

+1

應用math.modf(x)後,我該如何處理結果值?例如,如果我將1234.0分配給一個變量,我該怎麼做? – hakiko

+1

dec,int = math.modf(1234.5678) – gbtimmon

22
>>> a = 147.234 
>>> a % 1 
0.23400000000000887 
>>> a // 1 
147.0 
>>> 

如果你想的整數部分爲整數,而不是一個浮點數,使用int(a//1)代替。爲了獲得元組在一個單一的通道:(int(a//1), a%1)

編輯:請記住,the decimal part of a float number is approximate,所以如果你想表示它作爲一個人會做,你需要使用decimal library

+3

對負數「-2.25 // 1 == -3.0」和「-2.25%1 == 0.75」的結果稍有混淆。這可能是OP想要的,因爲int部分+小數部分仍然等於原始值。相反,'math.modf(-2.25)==(-0.25,-2.0)'。 –

+0

@安德魯 - 好點!無論如何,我認爲@ mhyfritz的答案是一個更好的答案! – mac

+0

不錯的 - 我認爲這將是這裏顯示的最快的方法銘記安德魯克拉克負數的警告 – jacanterbury

13
intpart,decimalpart = int(value),value-int(value) 

Works爲正數。

+0

'In [1]:value = 1.89' '在[2]:intpart,decimalpart = int(value ),值INT(值)' '在[3]:intpart' '缺貨[3]:1' '在[4]:decimalpart' '缺貨[4]:0.8899999999999999' – iMom0

+1

@ iMom0 - 請參閱http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html以及本網站上有關浮點精度的許多問題。 –

43

我們可以使用一個不着名的內置函數; divmod:

>>> s = 1234.5678 
>>> i, d = divmod(s, 1) 
>>> i 
1234.0 
>>> d 
0.5678000000000338 
+3

爲負數提供可能不直觀的結果:'divmod(-4.5,1)'給出-5.0和0.5。使用'divmod(-4.5,-1)'給出4.0和-0.5。 – Holloway

2

這是我的方式做到這一點:

num = 123.456 
split_num = str(num).split('.') 
int_part = int(split_num[0]) 
decimal_part = int(split_num[1]) 
+4

根據使用情況,這可能不適用於小數點後爲零的數字(例如123.0456) – Jon

+0

您是對的:它取決於用例。如果你用123.0456嘗試它,結果是int_part = 123和decimal_part = 456.在我的用例中,我發現「清零」有用:) – holydrinker

5

這種形式允許得到所需的精確度:

>>> a = 1234.5678 
>>> (lambda x, y : (int(x), int(x * y) % y/y))(a, 1e0) 
(1234, 0.0) 
>>> (lambda x, y : (int(x), int(x * y) % y/y))(a, 1e1) 
(1234, 0.5) 
>>> (lambda x, y : (int(x), int(x * y) % y/y))(a, 1e15) 
(1234, 0.5678) 
1

這也爲我的作品

>>> val_int = int(a) 
>>> val_fract = a - val_int 
1

如果您不介意使用NumPy,則:

In [319]: real = np.array([1234.5678]) 

In [327]: integ, deci = int(np.floor(real)), np.asscalar(real % 1) 

In [328]: integ, deci 
Out[328]: (1234, 0.5678000000000338) 
相關問題