为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2023-03-30 17:16:56
我怎么能不截断像 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我什至不知道我们怎么称呼那个哈哈...
查看完整描述

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

我注意到你的圆形功能使数字下降。如果是这种情况,您可以简单地将您的数字解析为字符串,将其四舍五入为您想要的小数位数,然后将其转换回数字。


查看完整回答
反对 回复 2023-03-30
?
泛舟湖上清波郎朗

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


查看完整回答
反对 回复 2023-03-30
?
侃侃无极

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


查看完整回答
反对 回复 2023-03-30
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

让我们用数学代替编程!


我们知道round(x, n) 四舍五入x到n小数位。你想要的是传递10**n给你的新函数而不是n. 所以,


def round_new(x, n):

    return round(x, int(-math.log10(n))

这应该给你你想要的,而不需要任何字符串搜索/拆分操作。


查看完整回答
反对 回复 2023-03-30
  • 4 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信