返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用Python进行正确的四舍五入
  • 350
分享到

如何使用Python进行正确的四舍五入

2023-06-16 07:06:00 350人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章为大家展示了如何使用python进行正确的四舍五入,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主要分享基于Python的数据分析三方库pandas,numpy的一次爬坑经历,发现并分析了p

本篇文章为大家展示了如何使用python进行正确的四舍五入,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

主要分享基于Python数据分析三方库pandas,numpy的一次爬坑经历,发现并分析了python语言对于浮点数精度处理不准确的问题,并在最后给出合理的解决方案。如果你也在用python处理数据,建议看一下,毕竟0.1的误差都可能造成比较大的影响。

问题出现

早上到了公司,领导发了几个文件过来,说这两天测试环境跑出来的数据,与实际情况有所出入,看看哪出的问题,尽快解决···

开始排查

  • 先对比数据,发现并不是所有的数据都出现问题,只有10%左右的数据有这个问题,说明应该不是逻辑上的问题,初步判断可能为个别情况需要特殊处理,考虑不周导致

  • 检查梳理各个运算模块,用debug断点调试一波,确定了数据出现偏差的模块

  • 通过单独测试这个单元模块最终确定,涉及到两数相除结果为0.5(浮点数)的地方有问题

  • 预期结果:np.round(0.5)=1,实际运算结果:np.round(0.5)=0,于是我做了如下的试验

# 基于python3.7版本 >>> import numpy as np  # 先看看 0 < x < 1 这个范围的结果,发现有问题 >>> np.round(0.50) 0.0 >>> np.round(0.51) 1.0 >>> np.round(0.49) 0.0  # 我担心是不是只有小数点为.5的都会呈现这种问题,所以测试了 x > 1的结果,发现还是有问题 >>> np.round(1.5) 2.0 >>> np.round(2.5) 2.0 >>> np.round(3.5) 4.0 >>> np.round(4.5) 4.0

通过对比,发现确实涉及到.5的值会有些和预想的不同,看看啥原因

分析问题

确实发现了关于浮点数(.5出现了理解上的偏差),看看官方文档怎么解释这个现象

numpy.around(a, decimals=0, out=None)[source] Evenly round to the given number of decimals.  # 对于恰好介于四舍五入的十进制值之间的中间值(.5),NumPy会四舍五入为最接近的偶数值。  # 因此1.5和2.5四舍五入为2.0,-0.5和0.5四舍五入为0.0,依此类推。 For values exactly halfway between rounded decimal values,  NumPy rounds to the nearest even value.  Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 round to 0.0, etc.  # np.around使用快速但有时不精确的算法来舍入浮点数据类型。 # 对于正小数,它等效于np.true_divide(np.rint(a * 10 **小数),10 **小数), # 由于IEEE浮点标准[1]和 十次方缩放时引入的错误 np.around uses a fast but sometimes inexact alGorithm to round floating-point datatypes.  For positive decimals it is equivalent to np.true_divide(np.rint(a * 10**decimals), 10**decimals),  which has error due to the inexact representation of decimal fractions in the IEEE floating point standard [1]  and errors introduced when scaling by powers of ten
  • 其实也就是说:对于带有.5这种刚好介于中间的值,返回的是相邻的偶数值

  • 白话解释:如果一个数字带有浮点数(.5),整数部分为偶数,则返回这个偶数;整数部分奇数,则返回这个奇数+1的偶数

  • 规律解释:如果整数部分能够整除2,则返回整数部分;如果整数部分不能整除2,则返回整数部分 +1

解决问题

先不做任何改动,看下数据误差的情形

# 我们为了先看下现象,构造如下案例 import pandas as pd import numpy as np  df = pd.DataFrame({"num1": [1, 1, 1.5, 5, 7.5], "num2": [2, 3, 1, 6, 3]})  df["真实值"] = df["num1"] / df["num2"] # 看下round函数过后的结果 df["偏差值"] = np.round(df["num1"] / df["num2"])

原始结果图片如下

如何使用Python进行正确的四舍五入
不做处理,期望值和偏差值不等的情况出现

我的解决方案

  • 我根据我的精度要求,构建精度范围所需要保留的小数点的最后一位,通过这个数字是否为5,判断是否需要向上取整

  • 举例来说,本案例中我只需要保留整数部分的数据,那么我只需要确定小数点后第一位是否是数字5就可以了

上代码

import pandas as pd import numpy as np import math  df = pd.DataFrame({"除数": [1, 1, 1.5, 5, 7.5], "被除数": [2, 3, 1, 6, 3]})  # 记录真实值 df["真实值"] = df["除数"] / df["被除数"]  # 记录整数部分 df["辅助整数列"] = df["真实值"].apply(lambda x: math.modf(x)[1])  # 记录小数部分,因为我的最后结果精度为只保留整数部分,所以我只需要保留一个小数点位进行判断是否需要进位操作 df["辅助小数列"] = df["真实值"].apply(lambda x: str(math.modf(x)[0]).split(".")[1][0])  # 小数点后的第一位是为5,则向上取整,不是5则调用原np.round就行了 df["期望值修正"] = df.apply(lambda x: x.辅助整数列 + 1 if (x.辅助小数列 == "5") else np.round(x.真实值), axis=1)

结果如下所示

如何使用Python进行正确的四舍五入
期望修正值已经达成

上述内容就是如何使用Python进行正确的四舍五入,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网Python频道。

--结束END--

本文标题: 如何使用Python进行正确的四舍五入

本文链接: https://lsjlt.com/news/282690.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用Python进行正确的四舍五入
    本篇文章为大家展示了如何使用Python进行正确的四舍五入,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主要分享基于python的数据分析三方库pandas,numpy的一次爬坑经历,发现并分析了p...
    99+
    2023-06-16
  • 如何用PHP的round()函数进行除以四舍五入
    在PHP中,四舍五入是一种常见的数学运算。但有时我们需要对被除数进行四舍五入,这就需要用到PHP中的一个函数:round()。round() 函数是PHP数字格式化库中一个非常实用的函数,可以将浮点数四舍五入到指定的小数位数。但是,由于PH...
    99+
    2023-05-14
    php round
  • C#之如何实现真正的四舍五入
    目录C#实现真正的四舍五入C#简单四舍五入函数总结C#实现真正的四舍五入 C#中的Math.Round()直接使用的话,实际上是:四舍六入五取偶,并不是真正意义上的四舍五入。 例如 ...
    99+
    2023-05-18
    C#四舍五入 C#实现四舍五入 四舍五入
  • 使用C#中的Math.Round函数对浮点数进行四舍五入
    使用C#中的Math.Round函数对浮点数进行四舍五入,需要具体代码示例在C#编程语言中,有时候我们需要对浮点数进行四舍五入操作。这时,我们可以使用Math.Round函数来实现此功能。Math.Round函数是C#中一个用于数学计算的内...
    99+
    2023-11-18
    浮点数 四舍五入 C# MathRound
  • 怎么用PHP的round()函数进行除以四舍五入
    这篇文章主要讲解了“怎么用PHP的round()函数进行除以四舍五入”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用PHP的round()函数进行除以四舍五入”吧!首先,我们需要了解PH...
    99+
    2023-07-05
  • Excel的round函数如何四舍五入
    这篇文章主要介绍“Excel的round函数如何四舍五入”,在日常操作中,相信很多人在Excel的round函数如何四舍五入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Excel的round函数如何四舍五入...
    99+
    2023-07-04
  • MySQL对小数进行四舍五入的操作实现
    目录函数说明使用数学函数是mysql中常用的一类函数。其主要用于处理数字,包括整型和浮点数等等。 MySQL常用的四舍五入函数: 函数说明 FLOOR(X) 返回不大于X的最大整数。CEIL(X)、CEILING(X) ...
    99+
    2023-08-24
    MySQL 小数四舍五入 MySQL 四舍五入
  • PHP如何使用round()函数实现四舍五入
    小编给大家分享一下PHP如何使用round()函数实现四舍五入,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!round:四舍五入round() 函数对浮点数进行四...
    99+
    2023-06-02
  • 如何正确进行Python编写
    这篇文章给大家介绍如何正确进行Python编写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python编写的Zope是开放源代码领域使用最广泛和最容易理解的内容管理框架,而这正是Microsoft .NET的CLR技...
    99+
    2023-06-17
  • php如何不四舍五入的保留一位小数
    本文小编为大家详细介绍“php如何不四舍五入的保留一位小数”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何不四舍五入的保留一位小数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法:1、利用“*”运算符...
    99+
    2023-06-30
  • Furmark如何进行正确的烤机?
      Furmark是一款非常不错的显卡性能以及稳定度测试软件,通过这款软件可以快速测试出显卡的性能以及显卡是否稳定,下面小编就来教教大家Furmark如何进行正确的烤机吧。   1、打开Furmark,可以看到如图界面。 ...
    99+
    2023-09-22
    服务器 开发语言 Powered by 金山文档
  • python如何正确使用yield
    目录生成器nextsendthrowclose使用场景大集合的生成简化代码结构协程与并发总结生成器 如果在一个方法内,包含了 yield 关键字,那么这个函数就是一个「生成器」。 生成器其实就是一个特殊的迭代器,它...
    99+
    2022-06-02
    python yield 使用yield
  • 如何进行Python数据分析?正确的“入门之路”三部曲!
    Python是一种面向对象、直译式计算机程序设计语言,由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。由于Python拥有非常丰富的库...
    99+
    2023-06-05
  • 如何正确的使用Python闭包
    如何正确的使用Python闭包?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Python 中的作用域规则和嵌套函数每当执行一个函数时,就会创建一个新的局部命...
    99+
    2023-06-15
  • 如何正确使用rowcount函数进行数据统计
    如何正确使用rowcount函数进行数据统计,需要具体代码示例在进行数据统计时,我们经常会使用到SQL语句来对数据库中的数据进行查询和分析。而在某些情况下,我们需要统计查询结果的行数,以便进行进一步的数据处理和分析。这时,就可以借助数据库提...
    99+
    2023-12-29
    数据统计 使用技巧 rowcount函数
  • 如何正确使用Python命令
    本篇内容主要讲解“如何正确使用Python命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何正确使用Python命令”吧!我想你最常用到的 Python 命令就是运行 Python 脚本文件...
    99+
    2023-06-16
  • Python中print如何正确使用
    Python中print如何正确使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python print会对输出的文本做自动的编码转换,而文件对象的write方法就不会做,因...
    99+
    2023-06-17
  • 利用SpringBoot进行Web开发时如何正确的使用注解
    利用SpringBoot进行Web开发时如何正确的使用注解?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、spring-boot-starter-web 依赖...
    99+
    2023-05-31
    springboot web
  • 如何进行正确的CentOS磁盘配额
    如何进行正确的CentOS磁盘配额,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。正确的CentOS磁盘配额,才可以让CentOS磁盘正常的工作,那么如何进行Ce...
    99+
    2023-06-16
  • 如何在python中正确的使用goto
    今天就跟大家聊聊有关如何在python中正确的使用goto,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作