4 回答

TA貢獻2011條經驗 獲得超2個贊
解決上述問題的一種可能方法是找出小數點分隔符后有多少位小數.。然后,如果您知道這些小數的位數,就可以輕松地四舍五入您的輸入數字。下面是一個例子:
def truncate(number, decimal):
decPart = str(decimal).split('.')
p = len(decPart[1]) if len(decPart) > 1 else 1
return round(number, p) if p > 1 else int(number)
print(truncate(4,1))
print(truncate(1.5,1))
print(truncate(1.5689,0.01))
print(truncate(1.7954,0.001))
輸出:
4
1
1.57
1.795
我注意到你的圓形功能使數字下降。如果是這種情況,您可以簡單地將您的數字解析為字符串,將其四舍五入為您想要的小數位數,然后將其轉換回數字。

TA貢獻1818條經驗 獲得超3個贊
這是該decimal
模塊的一個很好的應用程序,尤其是decimal.Decimal.quantize
:
import decimal
pairs = [
? ? ('4', '1'),
? ? ('1.5', '1'),
? ? ('1.5689', '0.01'),
? ? ('1.7954', '0.001')
? ? ]
for n, d in pairs:
? ? n, d = map(decimal.Decimal, (n, d))? # Convert strings to decimal number type
? ? result = n.quantize(d, decimal.ROUND_DOWN)? # Adjust length of mantissa
? ? print(result)
輸出:
4
1
1.56
1.795

TA貢獻2051條經驗 獲得超10個贊
也可以這樣做,使用this和this:
import numpy as np
result = np.round(number, max(str(formattocopy)[::-1].find('.'),0))
結果,對于number和formattocopy值:
number=1.234
formattocopy=1.2
結果:1.2
number=1.234
formattocopy=1.234
結果:1.234

TA貢獻1796條經驗 獲得超4個贊
讓我們用數學代替編程!
我們知道round(x, n) 四舍五入x到n小數位。你想要的是傳遞10**n給你的新函數而不是n. 所以,
def round_new(x, n):
return round(x, int(-math.log10(n))
這應該給你你想要的,而不需要任何字符串搜索/拆分操作。
添加回答
舉報