我將通過實例解釋我的問題:樓功能是消除整數科學記數法,巨蟒
>>> #In this case, I get unwanted result
>>> k = 20685671025767659927959422028/2580360422
>>> k
8.016582043889239e+18
>>> math.floor(k)
8016582043889239040
>>> #I dont want this to happen ^^, let it remain 8.016582043889239e+18
>>> #The following case though, is fine
>>> k2 = 5/6
>>> k2
0.8333333333333334
>>> math.floor(k2)
0
我如何math.floor不是地板的科學譜寫數字?是否有一個規則,哪些數字以科學記數法表示(我想這將是一定的界限)。
編輯:
我首先想到的是,math.floor函數造成的精度損失,但事實證明,第一次計算自己失去了計算的精度,這有我真的很困惑,它可以很容易地在這裏看到:
>>> 20685671025767659927959422028/2580360422
8016582043889239040
>>> 8016582043889239040 * 2580360422
20685671025767659370513274880
>>> 20685671025767659927959422028 - 20685671025767659370513274880
557446147148
>>> 557446147148/2580360422
216.0342184739958
>>> ##this is >1, meaning I lost quite a bit of information, and it was not due to the flooring
所以現在我的問題是如何得到實際的分裂結果。我看了下面的線程: How to print all digits of a large number in python? 但由於某種原因,我沒有得到相同的結果。
編輯: 我發現爲師準確性問題的簡單解決方案在這裏: How to manage division of huge numbers in Python? 顯然,//
操作返回int
而不是float
,它沒有大小限制拆開機器的內存。
_「我想這將是一個特定的邊界」_。我不這麼認爲。我剛剛輸入'99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999'到交互式提示符中,儘管比8e18大得多,它顯示了整個事情。 – Kevin
@Kevin試圖用東西劃分它 – GoldenSpecOps
這個符號只是一個數字的直觀表示。函數得到的參數是二進制表示,對於所有浮點數都是一樣的。 – DyZ