簡體   English   中英

從 Float 轉換為 Int 改變了輸出

[英]Converting from Float to Int changed the output

我定義了一個簡單的sqrt函數來計算給定數字的平方根。

def sqrt(n):
    low = 0
    up = n  
    for i in range(50):
        mid = float(low+up)/2
        if pow(mid,2) < n:
            low = mid
        elif pow(mid,2) > n:
            up = mid
        else:
            break
    return mid

當我做:

print(sqrt(9))

我得到3.0作為輸出。 但是,當我這樣做時:

print(int(sqrt(9)))我得到2

有人可以幫我理解為什么會這樣嗎?

謝謝你。

實際上, sqrt(9)返回2.9999999999999973 [1],至少在 Python 3.5版(也許所有3.x ?)中如此。 int只返回數字的整數部分。 這就是為什么你得到2作為結果,因為2.9999999999999973的整數部分確實是2

如果要將結果四舍五入到最接近的整數,可以執行round(sqrt(9))產生3

[1] 要了解發生這種情況的原因以及如何解決此問題,您可以參考這篇文章

這是因為四舍五入。 您的方法定義實際上將sqrt(9)計算為2.9999999999999973 然而,舍入不適用於鑄造,因此小數點在int(2.9999999999999973)的鑄造中丟失。 直接打印時,python 會應用舍入,使該值達到 3。

Python 2.7 輸出:

Python 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> def sqrt(n):
...     low = 0
...     up = n
...     for i in range(50):
...         mid = float(low+up)/2
...         if pow(mid,2) < n:
...             low = mid
...         elif pow(mid,2) > n:
...             up = mid
...         else:
...             break
...     return mid
...
>>> sqrt(9)
2.9999999999999973
>>> print(sqrt(9))
3.0
>>> print(int(sqrt(9)))
2
>>>

如果要轉換為int可以使用以下命令:

print(int(round(sqrt(9))))

暫無
暫無

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

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