[英]Round decimal - If 1 then no decimal, if 0.01 then 2 decimal
我怎樣才能不使用像 1、2、3 這樣的隨機數截斷,而是直接使用十進制語法截斷?
例如:
我不知道這樣的 function 是否存在,但我想像這樣: round(1.5689, 0.01)
-> 1.56
我什至不知道我們怎么能稱之為大聲笑......
這是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)
Output:
4
1
1.56
1.795
解決上述問題的一種可能方法是找出小數點分隔符后的小數位數.
. 然后,如果您知道這些小數的位數,您可以輕松地四舍五入您的輸入數字。 下面是一個例子:
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))
Output:
4
1
1.57
1.795
我注意到您的圓形 function 樓層數。 如果是這種情況,您可以簡單地將您的數字作為字符串操作,將其四舍五入為您想要的小數位數,然后將其轉換回數字。
讓我們用數學代替編程!
我們知道round(x, n)
將x
舍入到n
位小數。 您想要的是將10**n
傳遞給您的新 function 而不是n
。 所以,
def round_new(x, n):
return round(x, int(-math.log10(n))
這應該會給你你想要的東西,而不需要任何字符串搜索/拆分操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.