博客
关于我
python3 week4
阅读量:795 次
发布时间:2023-03-08

本文共 3143 字,大约阅读时间需要 10 分钟。

如何实现四舍五入功能,不使用Python内建函数

在编写代码时,确保处理所有情况,包括正数、负数、整数和小数。以下是实现四舍五入的步骤说明:

  • 检查输入有效性:首先,确认source_num和precise_num是否为有效数字和整数。

  • 分割整数与小数部分:将source_num转换为字符串,分割为整数和小数部分。

  • 处理保留位数

    • 如果保留位数为0,处理整数部分,判断最后一位是否需要进位。
    • 如果保留位数大于0,处理小数部分,根据保留位数截取或补零。
  • 四舍五入处理

    • 根据保留位数,检查小数部分的最后一位是否大于等于5,决定是否需要进位。
    • 处理进位时,注意整数部分的变化。
  • 返回结果:将处理后的整数和小数部分组合,返回四舍五入后的结果。

  • 以下是优化后的Python代码,实现四舍五入功能:

    def func(source_num, precise_num):    # 检查输入是否为有效数字    try:        if not isinstance(source_num, (int, float)) or not isinstance(precise_num, int):            raise ValueError("输入错误,source_num必须是数字,precise_num必须是整数")        if precise_num < 0:            raise ValueError("保留位数不能为负数")    except ValueError:        print("输入错误,source_num必须是数字,precise_num必须是整数")        return    # 处理特殊情况,保留0位小数    if precise_num == 0:        if isinstance(source_num, int):            # 处理整数四舍五入            if source_num == 0:                return "0"            num_str = str(source_num)            if len(num_str) == 1:                return num_str            last_digit = num_str[-1]            if int(last_digit) >= 5:                return str(int(num_str) + 1)            else:                return num_str        else:            # 处理浮点数,保留0位小数            num_str = str(source_num)            if '.' not in num_str:                num_str += ".0"            parts = num_str.split('.')            integer_part = parts[0]            if len(integer_part) == 1:                integer_part += "0"            else:                last_digit = integer_part[-1]                if int(last_digit) >= 5:                    integer_part = str(int(integer_part) + 1)                    if len(integer_part) > 1:                        return integer_part                    else:                        return integer_part + ".0"                else:                    return integer_part + ".0"    else:        # 处理保留precise_num位小数        num_str = str(source_num)        if '.' not in num_str:            num_str += ".0"        parts = num_str.split('.')        integer_part = parts[0]        decimal_part = parts[1]        # 保留precise_num位小数        decimal_length = len(decimal_part)        if decimal_length > precise_num:            # 截断后面多余的部分,并检查是否需要进位            decimal_part = decimal_part[:precise_num]            if decimal_part[-1] >= '5':                integer_part = str(int(integer_part) + 1)                if len(integer_part) > 1:                    integer_part = integer_part[:-1]                decimal_part = decimal_part[:-1]                if len(decimal_part) < precise_num:                    decimal_part = decimal_part.ljust(precise_num, '0')        elif decimal_length < precise_num:            # 补零            decimal_part = decimal_part.ljust(precise_num, '0')        else:            # 保留precise_num位,小数位数等于precise_num            pass        # 组合结果        result = f"{integer_part}.{decimal_part}"        return result# 测试函数try:    source_num = float(input("请输入数值:"))    precise_num = int(input("请输入保留位数:"))    result = func(source_num, precise_num)    print(f"四舍五入后的结果为:{result}")except ValueError:    print("输入错误,请检查输入是否为有效数字和正整数保留位数。")

    这个代码实现了四舍五入功能,能够处理整数和浮点数,保留指定的位数,并正确处理进位情况。

    转载地址:http://tulfk.baihongyu.com/

    你可能感兴趣的文章
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySql 创建函数 Error Code : 1418
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    MySQL 到底能不能放到 Docker 里跑?
    查看>>
    mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
    查看>>
    MySQL 加锁处理分析
    查看>>
    mysql 协议的退出命令包及解析
    查看>>
    mysql 参数 innodb_flush_log_at_trx_commit
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    MySQL 命令和内置函数
    查看>>
    mysql 四种存储引擎
    查看>>
    MySQL 在并发场景下的问题及解决思路
    查看>>
    MySQL 基础架构
    查看>>
    MySQL 基础模块的面试题总结
    查看>>
    MySQL 备份 Xtrabackup
    查看>>