舍入小数 - 如果为 1 则没有小数,如果为 0.01 则为 2 小数

我怎么能不截断像 1、2、3 这样的随意数字,而是直接用十进制语法截断?

例如:

  • 我有 4 和小数为 1,所以截断为 4。

  • 我有 1.5 和小数为 1,所以截断为 1。

  • 我有 1.5689 和小数 0.01,所以截断为 1.56。

  • 我有 1.7954 和小数 0.001,所以截断为 1.795。

我不知道这样的功能是否存在,但我想是这样的: round(1.5689, 0.01)->1.56

我什至不知道我们怎么称呼那个哈哈...


萧十郎
浏览 145回答 4
4回答

森林海

解决上述问题的一种可能方法是找出小数点分隔符后有多少位小数.。然后,如果您知道这些小数的位数,就可以轻松地四舍五入您的输入数字。下面是一个例子: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))这应该给你你想要的,而不需要任何字符串搜索/拆分操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python