-
森林海
解决上述问题的一种可能方法是找出小数点分隔符后有多少位小数.。然后,如果您知道这些小数的位数,就可以轻松地四舍五入您的输入数字。下面是一个例子: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))输出:411.571.795我注意到你的圆形功能使数字下降。如果是这种情况,您可以简单地将您的数字解析为字符串,将其四舍五入为您想要的小数位数,然后将其转换回数字。
-
泛舟湖上清波郎朗
这是该decimal模块的一个很好的应用程序,尤其是decimal.Decimal.quantize:import decimalpairs = [ ('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)输出:411.561.795
-
侃侃无极
也可以这样做,使用this和this:import numpy as npresult = np.round(number, max(str(formattocopy)[::-1].find('.'),0))结果,对于number和formattocopy值:number=1.234formattocopy=1.2结果:1.2number=1.234formattocopy=1.234结果:1.234
-
慕的地8271018
让我们用数学代替编程!我们知道round(x, n) 四舍五入x到n小数位。你想要的是传递10**n给你的新函数而不是n. 所以,def round_new(x, n): return round(x, int(-math.log10(n))这应该给你你想要的,而不需要任何字符串搜索/拆分操作。