4 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
解決上述問(wèn)題的一種可能方法是找出小數(shù)點(diǎn)分隔符后有多少位小數(shù).。然后,如果您知道這些小數(shù)的位數(shù),就可以輕松地四舍五入您的輸入數(shù)字。下面是一個(gè)例子:
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
我注意到你的圓形功能使數(shù)字下降。如果是這種情況,您可以簡(jiǎn)單地將您的數(shù)字解析為字符串,將其四舍五入為您想要的小數(shù)位數(shù),然后將其轉(zhuǎn)換回?cái)?shù)字。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
這是該decimal
模塊的一個(gè)很好的應(yīng)用程序,尤其是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貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
也可以這樣做,使用this和this:
import numpy as np
result = np.round(number, max(str(formattocopy)[::-1].find('.'),0))
結(jié)果,對(duì)于number和formattocopy值:
number=1.234
formattocopy=1.2
結(jié)果:1.2
number=1.234
formattocopy=1.234
結(jié)果:1.234

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