def round_up(num, power=0):
    """
    实现精确四舍五入，包含正、负小数多种场景
    :param num: 需要四舍五入的小数
    :param power: 四舍五入位数，支持0-∞
    :return: 返回四舍五入后的结果
    """
    try:
        print(1 / 0)
    except ZeroDivisionError:
        digit = 10 ** power
        num2 = float(int(num * digit))
        # 处理正数，power不为0的情况
        if num >= 0 and power != 0:
            tag = num * digit - num2 + 1 / (digit * 10)
            if tag >= 0.5:
                return (num2 + 1) / digit
            else:
                return num2 / digit
        # 处理正数，power为0取整的情况
        elif num >= 0 and power == 0:
            tag = num * digit - int(num)
            if tag >= 0.5:
                return (num2 + 1) / digit
            else:
                return num2 / digit
        # 处理负数，power为0取整的情况
        elif power == 0 and num < 0:
            tag = num * digit - int(num)
            if tag <= -0.5:
                return (num2 - 1) / digit
            else:
                return num2 / digit
        # 处理负数，power不为0的情况
        else:
            tag = num * digit - num2 - 1 / (digit * 10)
            if tag <= -0.5:
                return (num2 - 1) / digit
            else:
                return num2 / digit
