所以,假設有一個浮點數:0.11910000
這是一個數字串列:11970, 12020, 12070, 12165, 12400, 11100
我需要他們轉向:0.11970, 0.12020, 0.12070, etc...這是基于浮點數中的小數點是0.1191,如果是,1.191那么數字將是1.197, 1.202, 1.207...。還有一點,小數點應該是數字與原始浮點數最接近的位置。意義:
如果我們9.21將原始浮點數作為數字并944 968 1032作為數字,它應該是9.44, 9.68, 10.32而不是9.44, 9.68, 1.032。
現在我做了一個函式,經過數百萬次嘗試,我的大腦在這一點上如此煎熬,結果甚至沒有接近。這是我尷尬的功能:
def calculate_dec_place(num : float, original_num : float) -> float:
return num / 10 ** len(str(int(round(num // original_num, -len(str(int(num // original_num))) 1)))) - 1
uj5u.com熱心網友回復:
我們需要兩個函式,其中一個找到數字的指數:
def find_exponent(n):
return math.floor(math.log10(abs(n)))
find_exponent(0.01) -2
find_exponent(0.1) -1
find_exponent(1) 0
find_exponent(10) 1
find_exponent(100) 2
另一個函式接受一個數字并移動它,使指數對齊:
def align_decimal(target: float, other: float) -> float:
target_exponent = find_exponent(target)
return other*10**(target_exponent - find_exponent(other))
Example math:
find_exponent(944) = 2
find_exponent(0.000921) = -4
944*10^(-3 -(2)) = 0.000944
Example output:
align_decimal(0.000921, 944) 0.000944
我們現在可以應用串列推導來獲得您的答案:
def align_decimals(target: float, others: list[float]) -> list[float]:
return [align_decimal(target, x) for x in others]
example:
align_decimals(9.21, [944, 968, 1032])
Out[50]: [9.44, 9.68, 1.032]
align_decimals(7.34, [0.101])
Out[51]: [1.01]
完整代碼:
import math
def find_exponent(n):
return int(math.log10(abs(n)))
def align_decimal(target: float, other: float) -> float:
target_exponent =
uj5u.com熱心網友回復:
這是 Tom McLeans 的 find_exponent 函式的固定版本:
import math
def find_exponent(n):
a = math.log10(abs(n))-math.log10(5)
b = math.ceil(a)
if a == b:
return int(a 1)
else:
return b
示例案例:
find_exponent(0.0501)
Out[482]: -1
find_exponent(0.049999999999)
Out[483]: -2
find_exponent(78.1)
Out[484]: 2
find_exponent(500)
Out[485]: 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520215.html
