Python实现真正的四舍五入

这篇具有很好参考价值的文章主要介绍了Python实现真正的四舍五入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

Python 内置的函数 round() 能够大致实现四舍五入的功能,但会存在部分场景不适用,比如:

round(1.315, 2)
# 返回结果:1.31

round(2.675, 2)
# 返回结果:2.67

round(5.215, 2)
# 返回结果:5.21

round(56.5)
# 返回结果:56

网上搜了一圈,只找到了 Decimal 的替代解决方法,但看了貌似比较复杂,经过思考一番,只有遇到尾数为 5 的情况下,才会计算有偏差,那直接把 5 加 1 变成 6,不就可以轻松解决了吗?说干就干,经过一番测试,实现了真正的四舍五入。

二、Python实现真正的四舍五入

def rounding(num, n=0):
    """
    功能:优化Python内置的round()函数有时出现四舍六入的问题,实现真正的四舍五入。
    实现原理:当需要四舍五入的小数点后一位是5时,加1变成6,即可顺利利用round()函数,实现真正的四舍五入。
    参数:
        num: 需要四舍五入的数字;
        n: 保留的小数点位数,默认取整。
    """
    
    if '.' in str(num):
        if len(str(num).split('.')[1]) > n and str(num).split('.')[1][n] == '5':
            num += 1 * 10 ** -(n+1)
    if n:
        return round(num, n)
    else:
        return round(num)

 测试一下:

print('修正四舍六入:')
print('2.675 保留 2 位小数的四舍五入结果为:', rounding(2.675, 2))
print('5.215 保留 2 位小数的四舍五入结果为:', rounding(5.215, 2))
print('1.315 保留 2 位小数的四舍五入结果为:', rounding(1.315, 2))
print('\n取整结果:')
print('56.50 四舍五入取整的结果为:', rounding(56.50, 0))
print('56.5 四舍五入取整的结果为:', rounding(56.5, 0))
print('56.0 四舍五入取整的结果为:', rounding(56.0, 0))
print('56 四舍五入取整的结果为:', rounding(56, 0))
print('\n未加参数默认取整结果:')
print('56.50 四舍五入取整的结果为:', rounding(56.50))
print('56.5 四舍五入取整的结果为:', rounding(56.5))
print('56.0 四舍五入取整的结果为:', rounding(56.0))
print('56 四舍五入取整的结果为:', rounding(56))

 返回结果如下:

修正四舍六入:
2.675 保留 2 位小数的四舍五入结果为: 2.68
5.215 保留 2 位小数的四舍五入结果为: 5.22
1.315 保留 2 位小数的四舍五入结果为: 1.32

取整结果:
56.50 四舍五入取整的结果为: 57
56.5 四舍五入取整的结果为: 57
56.0 四舍五入取整的结果为: 56
56 四舍五入取整的结果为: 56

未加参数默认取整结果:
56.50 四舍五入取整的结果为: 57
56.5 四舍五入取整的结果为: 57
56.0 四舍五入取整的结果为: 56
56 四舍五入取整的结果为: 56

 搞定!

如有其他特殊情况未兼容,欢迎在评论区留言反馈~文章来源地址https://www.toymoban.com/news/detail-507739.html

到了这里,关于Python实现真正的四舍五入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog FPGA实现除法——整除与四舍五入

    Verilog FPGA实现除法——整除与四舍五入 在FPGA开发中,实现除法计算是非常必要的。本文将介绍如何使用Verilog语言实现除法计算,包括整除和四舍五入两种情况。 整除实现 在Verilog中,整除的实现可以通过比较被除数是否大于等于除数来进行。具体步骤如下: 将除数与被除数

    2024年02月08日
    浏览(36)
  • 【python】四舍五入保留N位小数,截断保留小数

    目录 一.环境 二.适用场景 三.具体方法代码及描述 1.方法一:numpy-around()方法,四舍五入 2.方法二:字符串格式化(有两种方式,均为四舍五入)【推荐】 1)%.4f 法 2)   {:.4f} 法  3.方法三:format函数法【推荐】,四舍五入  4.方法四:round()方法,四舍五入  5.方法五:math-

    2024年02月09日
    浏览(43)
  • python知识点100篇系列(11)-浮点数四舍五入的两种方法

    Python 的四舍五入主要有两种方式; 内置函数 round(number[, ndigits]) 使用 Decimal 先说结论: 如果是对金额的四舍五入,不建议使用内置函数,原因如下: 使用round方法: python3中的round函数对浮点数进行四舍五入的规则: 参数ndigits 不为 0 的情况 如果保留位数的后一位小于等于

    2024年02月07日
    浏览(38)
  • elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 写项目的时候,遇到需要在动态表单中,将同一级输入框输入的内容计算出来,并动态显示,发现computer计算属性好像不能带参数,最后查了好多文档才解决,看下面简单案例 vue中computed计算属性无法直

    2024年02月14日
    浏览(38)
  • 四舍五入(c++基础)

    题目描述: 给定一个实数x,求保留y位小数的结果。(x=1000,y=5,y为整数) 输入格式: 一行,两个数,以一个空格分开。 输出格式: 一个实数。 样例输入: 样例输出: 提示:  方法一(推荐): 使用c语言中printf语句。 printf(\\\"%0.*lf\\\",y,x) 表示输出x时保留y位小数(*会用后面的y替代)

    2024年02月14日
    浏览(47)
  • 语法-Java四舍五入等详解

    long round(double d) int round(float f) ​ Math.round()是Java中经典的舍入数字方法, 它返回的是整数 ,也就是说对浮点数四舍五入成整数。 ​ Java的最佳实践是优先使用BigDecimal而不是Math.round()来对Java的数字进行四舍五入。每当需要将数字四舍五入到小数点后n位时,首先考虑BigDecimal。

    2024年02月15日
    浏览(40)
  • Java中的取整、四舍五入

    目录 1、直接强制转换--取整 2、Java提供的函数  参考文献 结果: 直接用强制转换的方式将浮点型数据转换为整型时, 直接去掉小数点后部分的精度,取整数部分 ; 直接强制取整有精度风险 一方面是小数位损失 另一方面当浮点型数字超过整型数字最大值时,会发生溢出 实

    2024年02月14日
    浏览(40)
  • C# 四舍五入 MidpointRounding.AwayFromZero

    四舍五入 在计算中 经常使用到,但是如果使用 Math.Round,只是五舍六入 在Math.Round内传入MidpointRounding.AwayFromZero枚举,就可以实现四舍五入的效果了, C#文档 https://docs.microsoft.com/zh-cn/dotnet/api/system.midpointrounding?view=net-6.0#system-midpointrounding-awayfromzero

    2024年02月13日
    浏览(49)
  • java四舍五入方法的基础学习

    以下均为自己的学习复习资料,如有不对的地方请发在评论区中,我会仔细思考并作出修改,大家共同学习,谢谢! 主要资料可以从java.base (Java SE 17 JDK 17) (oracle.com)(java文档)中查找到 四舍五入分为三种: 向上取整 、 向下取整 、 四舍五入 。 先给实例再谈理解: 向上取整

    2024年02月07日
    浏览(39)
  • java四舍五入常用的2种方法

    1.Math.round Math.round ()是Java中舍入数字的经典方法,Math.round(变量名称)这种返回的其实是整数,也就是说 四舍五入之后是整数 。   该方法有以下几种语法格式: 示例:  输出结果为: 101 101 100 90  如果要输出百分比(记得乘100): 2.DecimalFormat 对Java中 DecimalFormat 的所有基础用法进

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包