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))
这应该给你你想要的,而不需要任何字符串搜索/拆分操作。
添加回答
举报