用python方法将浮点数四舍五入到指定的最小和最大小数位数

2024-09-30 20:39:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想实现一个函数round(num, min, max),它将浮点值舍入到至少min小数位,最多max。我想要一个字符串。我有一些有用的东西,但它的长度惊人地长。你能写出比我更像Python的作品吗?在

使用

round(3.14159, 2, 4) --> '3.1416'
round(3.14159, 0, 2) --> '3.14'
round(3.14159, 0, 1) --> '3.1'
round(3.14159, 0, 0) --> '3'
round(3.14159, 4, 6) --> '3.141590'
round(3.14, 4, 6)    --> '3.1400'
round(3, 4, 6)       --> '3.0000'

我想你明白了。这是我得到的。在

^{pr2}$

Tags: 函数字符串minnum作品max浮点round
2条回答

只是一些小的改进,但保留了基本思想(转换值、去掉零、去掉小数点)。在

第一个更改是避免与内置函数minmax的名称冲突。我认为,使用为特定目的而设计的函数(str.format用于值格式化,str.rstrip用于从右剥离,str.endswith用于测试最后一个字符)会使它更像python。在

def round(amount, dmin, dmax):
    assert 0 <= dmin <= dmax
    astr = '{:.{prec}f}'.format(amount, prec=dmax)
    if dmax != dmin:
        astr = astr[:dmin-dmax] + astr[dmin-dmax:].rstrip('0')
        if astr.endswith('.'):
            astr = astr[:-1]
    return astr

您将浮点舍入与打印格式混淆。*

浮点数3.143.1415不同。所以把3.1415取整为2位数是有意义的。在

但是浮点数3.003.0完全相同。所以把3.0四舍五入到2位数是没有用的;它仍然会是你开始时做的同样的事情。在

同时,如果您想更改数字的打印方式,可以使用format函数、str.format方法、f-strings、%格式等进行更改。例如:

>>> pi = 3.1415
>>> indianapi = round(pi, 0)
>>> indianapi
3.0
>>> f'{indianapi:.3f}'
'3.000'

有关如何使用f字符串的详细信息,请参见Format Specification Mini-Language(以及str.formatformat),以及^{}-Style String Formatting,以了解如何使用%。在


或者通过一个子链来保持精度。如果这就是您所追求的,float不能做到这一点,但是decimal.Decimal可以,所以您可能需要看看decimal模块。但我认为这不是你想要的。

相关问题 更多 >