Python四舍五入

2022-07-28,

Python四舍五入的方法

  • 闲暇之余写的一个四舍五入的方法
    • 整体思路
    • 不说废话直接上代码
    • 运行结果
    • 待优化部分

闲暇之余写的一个四舍五入的方法

整体思路

先把要保留的部分截下来,然后遍历后续小数位,最终需要进位就给保留部分+个0.x1 不需要进位就把保留部分直接返回。技艺不精,若有大神路过轻喷~

不说废话直接上代码

def new_type(testNum,b=2):
    """
    :param testNum: 原数字
    :param b: 保留位数
    :return: 四舍五入后的结果
    """
    testNum = str(testNum)
    pointIndex =  testNum.find(".") # 获取原数据小数点下标index
    if pointIndex == -1:
        return testNum
    splList = testNum.split(".") # 分割整数和小数部分
    if len(splList[1])<=b:
        return testNum
    staticNum = testNum[0:(pointIndex+b+1)] # 整数.保留位数
    bsNum = list(testNum[pointIndex+b+1:]) # 待取舍部分
    bsNum.reverse() # 倒序,为了配合for in语法
    c = 0 # 遍历取舍部分,判定最终是否进1
    for i in bsNum:
        if (int(i)+c) >= 5:
            c = 1
        else:
            c = 0
    if c == 0:
        return staticNum
    # 对保留部分作进1处理
    staticNum = list(testNum[0:(pointIndex + b + 1)])
    if c == 1:
        staticNum[-1] = str(int(staticNum[-1]) + 1)
    finalNum = ""
    for i in staticNum:
        finalNum += i
    return float(finalNum)

运行结果

待优化部分

明明只想给小数点最后一位+个1,结果居然需要先转列表,取值转int+1 再转str。
然后还要再遍历一次拼接,转float。
为了加这个1,性能代价超级大,不合理

本文地址:https://blog.csdn.net/caiciacaibeiqie/article/details/109649554

《Python四舍五入.doc》

下载本文的Word格式文档,以方便收藏与打印。