2016-01-26 32 views
4

對於我正在進行的編碼練習,我試圖比較兩個數字並選擇具有較大數字有效數字的數字。比較兩個數字中的有效數字的數量

例如:比較2.37e+072.38279e+07,請選擇2.38279e+07,因爲它具有更多有效數字。

我不知道如何在Python中實現它。我考慮使用len(str(NUMBER))來計算每個數字的長度,但是這種方法對於上述兩個數字都返回「10」,因爲它不區分零和非零數字。

如何比較Python中有效數字的數量?

+2

你是從'float'對象還是'str'對象開始的? –

+1

如果他們是'浮動',那麼你需要看看輸入數字的精度,而不是計算的數字,因爲他們可以有'人工數字的有效數字'?實際上,輸出結果的準確性直接關係到輸入精度的準確性。 –

回答

2

一個快速和骯髒的方法可能是len(str(NUMBER).strip('0'))這將削減任何尾隨零和計數剩餘的數字。

要打折的小數點,然後你需要len(str(NUMBER).replace('.','').strip('0'))

但是你需要記住,在許多情況下,蟒蛇浮點數轉換成字符串可以給你一些奇怪的行爲,由於道路浮點數字被處理。

1

如果你打算去與文本上這樣做,你可以執行以下操作使用正則表達式:

import re 

l = re.compile(r'(\d*?)(0*)(\.0?)') 

>>> l.match(str(2.37e+07)).groups()[0] 
'237' 
0

可以試試這樣的算法:

sf1 = "2.3723805" 
addsf1 = 0 
decimal = False 
for num in sf1: 
    if decimal == True: 
     addsf1 = addsf1 + int(num) 
    if num == ".": 
     decimal = True 
print(addsf1) 

這將檢查如果你把它轉換成一個字符串,那麼這個數字中的每一個字母都是這樣。然後它會遍歷每一個字母,直到達到小數部分,然後它會將這些數字加在一起。您可以對另一個可用於比較兩者之間差異的有效數字執行此操作。這會告訴哪個人有更大的數字。

不知道這是否是針對您的問題的最佳解決方案。