跟老齐学Python之啰嗦的除法

Jun 06, 2016 am 11:32 AM
分割

除法啰嗦的,不仅是python。

整数除以整数

看官请在启动idle之后,练习下面的运算:

>>> 2/5
0
>>> 2.0/5
0.4
>>> 2/5.0
0.4
>>> 2.0/5.0
0.4
ログイン後にコピー

看到没有?麻烦出来了,如果从小学数学知识除法,以上四个运算结果都应该是0.4。但我们看到的后三个符合,第一个居然结果是0。why?

因为,在python里面有一个规定,像2/5中的除法这样,是要取整。2除以5,商是0(整数),余数是2(整数)。那么如果用这种形式:2/5,计算结果就是商那个整数。或者可以理解为:整数除以整数,结果是整数(商)。

继续实验,验证这个结论:

>>> 5/2
2
>>> 6/3
2
>>> 5/2
2
>>> 6/2
3
>>> 7/2
3
>>> 8/2
4
>>> 9/2
4
ログイン後にコピー

注意:这里是得到整数商,而不是得到含有小数位的结果后“四舍五入”。例如5/2,得到的是商2,余数1,最终5/2=2。并不是对2.5进行四舍五入。

浮点数与整数相除

列为看官注意,这个标题和上面的标题格式不一样,上面的标题是“整数除以整数”,如果按照风格一贯制的要求,本节标题应该是“浮点数除以整数”,但没有,现在是“浮点数与整数相除”,这是因为包含了以下三种情况:

被除数是浮点数,除数是整数
被除数是整数,除数是浮点数
被除数和除数都是浮点数
出结论之前,还是先做实验:

>>> 9.0/2
4.5
>>> 9/2.0
4.5
>>> 9.0/2.0
4.5
>>> 8.0/2
4.0
>>> 8/2.0
4.0
>>> 8.0/2.0
4.0
ログイン後にコピー

归纳,得到规律:不管是被除数还是除数,只要有一个数是浮点数,结果就是浮点数。所以,如果相除的结果有余数,也不会像前面一样了,而是要返回一个浮点数,这就跟在数学上学习的结果一样了。

>>> 10.0/3
3.3333333333333335
ログイン後にコピー


这个是不是就有点搞怪了,按照数学知识,应该是3.33333...,后面是3的循环了。那么你的计算机就停不下来了,满屏都是3。为了避免这个,python武断终结了循环,但是,可悲的是没有按照“四舍五入”的原则终止。

关于无限循环小数问题,小学都学习了,但是这可不是一个简单问题,看看维基百科的词条:0.999...,会不会有深入体会呢?

总之,要用python,就得遵循她的规定,前面两条规定已经明确了。

补充一个资料,供有兴趣的朋友阅读:浮点数算法:争议和限制
说明:以上除法规则,是针对python2,在python3中,将5/2和5.0/2等同起来了。不过,如果要得到那个整数部分的上,可以用另外一种方式:地板除.

>>> 9/2
4
>>> 9//2
4
ログイン後にコピー

python总会要提供多种解决问题的方案的,这是她的风格。

开始用轮子

python之所以受人欢迎,一个很重重要的原因,就是轮子多。这是比喻啦。就好比你要跑的快,怎么办?光天天练习跑步是不行滴,要用轮子。找辆自行车,就快了很多。还嫌不够快,再换电瓶车,再换汽车,再换高铁...反正你可以选择的很多。但是,这些让你跑的快的东西,多数不是你自己造的,是别人造好了,你来用。甚至两条腿也是感谢父母恩赐。正是因为轮子多,可以选择的多,就可以以各种不同速度享受了。

python就是这样,有各种各样别人造好的轮子,我们只需要用。只不过那些轮子在python里面的名字不叫自行车、汽车,叫做“模块”,有人承接别的语言的名称,叫做“类库”、“类”。不管叫什么名字把。就是别人造好的东西我们拿过来使用。

怎么用?可以通过两种形式用:

形式1:import module-name。import后面跟空格,然后是模块名称,例如:import os
形式2:from module1 import module11。module1是一个大模块,里面还有子模块module11,只想用module11,就这么写了。比如下面的例子:
不啰嗦了,实验一个:

>>> from __future__ import division
>>> 5/2
2.5
>>> 9/2
4.5
>>> 9.0/2
4.5
>>> 9/2.0
4.5
ログイン後にコピー

注意了,引用了一个模块之后,再做除法,就不管什么情况,都是得到浮点数的结果了。

这就是轮子的力量。

关于余数

前面计算5/2的时候,商是2,余数是1

余数怎么得到?

实验下面的操作:

>>> 5%2
1
>>> 9%2
1
>>> 7%3
1
>>> 6%4
2
>>> 5.0%2
1.0
ログイン後にコピー

符号:%,就是要得到两个数(可以是整数,也可以是浮点数)相除的余数。

前面说python有很多人见人爱的轮子(模块),她还有丰富的内建函数,也会帮我们做不少事情。例如函数divmod()

>>> divmod(5,2) #表示5除以2,返回了商和余数
(2, 1)
>>> divmod(9,2)
(4, 1)
>>> divmod(5.0,2)
(2.0, 1.0)
ログイン後にコピー

四舍五入

最后一个了,一定要坚持,今天的确有点啰嗦了。要实现四舍五入,很简单,就是内建函数:round()

动手试试:

>>> round(1.234567,2)
1.23
>>> round(1.234567,3)
1.235
>>> round(10.0/3,4)
3.3333
ログイン後にコピー

简单吧。越简单的时候,越要小心,当你遇到下面的情况,就有点怀疑了:

>>> round(1.2345,3)
1.234        #应该是:1.235
>>> round(2.235,2)
2.23        #应该是:2.24
ログイン後にコピー

哈哈,我发现了python的一个bug,太激动了。

别那么激动,如果真的是bug,这么明显,是轮不到我的。为什么?具体解释看这里,下面摘录官方文档中的一段话:

Note:
The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information.
ログイン後にコピー

原来真的轮不到我。(垂头丧气状。)

似乎除法的问题到此要结束了,其实远远没有,不过,做为初学者,至此即可。还留下了很多话题,比如如何处理循环小数问题,我肯定不会让有探索精神的朋友失望的,在我的github中有这样一个轮子,如果要深入研究,可以来这里尝试。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Golangの割り算と丸め演算の詳しい解説 Golangの割り算と丸め演算の詳しい解説 Jan 28, 2024 am 10:15 AM

Golang の除算と丸め方法の詳細な説明 1. はじめに Golang プログラミングでは、除算演算で丸め演算が必要になる場合があります。浮動小数点数を別の浮動小数点数で除算し、結果を丸める場合は、Golang が提供する数学パッケージの関連関数を使用できます。 2. 切り捨て 切り捨てとは、値を最も近い整数に切り捨てることを指します。 Golang では、数学パッケージの Floor 関数を使用して切り捨てを実現できます。サンプルコードは次のとおりです。

Golang の除算演算に関する一般的なエラーと解決策 Golang の除算演算に関する一般的なエラーと解決策 Feb 22, 2024 pm 10:33 PM

Golang の除算演算に関する一般的なエラーと解決策 Golang では、除算演算は日常のプログラミングで頻繁に遭遇する演算の 1 つです。ただし、除算演算中に一般的なエラーが発生し、プログラムで予期しない結果や実行時例外が発生する場合があります。この記事では、一般的な除算演算エラーをいくつか紹介し、対応する解決策を示し、具体的なコード例を示します。 1. 整数の除算では結果が切り捨てられます。Golang では、2 つの整数が

『Oracle Database実践ガイド: 部門操作のアプリケーション・シナリオ』 『Oracle Database実践ガイド: 部門操作のアプリケーション・シナリオ』 Mar 02, 2024 pm 09:33 PM

Oracle データベースは、エンタープライズ レベルのリレーショナル データベース管理システムとして、強力な機能と柔軟なアプリケーション シナリオを備えています。データベース操作では、除算操作はデータ処理、クエリ、分析のニーズを達成するのに役立つ一般的で重要な操作方法です。この記事では、Oracle データベースにおける除算演算の適用シナリオを実践ガイドの形で詳しく紹介し、具体的なコード例を示します。 1. 除算演算の概要 Oracle データベースでは、除算演算には主に 2 つの演算子が使用されます。 /: は通常の演算子を表します。

Golangにおける除算演算の原理を詳しく解説 Golangにおける除算演算の原理を詳しく解説 Feb 20, 2024 pm 08:30 PM

Golang の除算演算原理とコード例を詳しく解説 コンピュータプログラミングにおいて、除算演算は一般的な基本演算です。 Go 言語では、除算演算にも独自の原則とルールがあります。この記事では、誰もが Go 言語の除算演算の原理をよりよく理解して習得できるように、Golang の除算演算の詳細な説明といくつかの具体的なコード例を示します。 1. 整数の除算 まず、Golang における整数の除算の規則を見てみましょう。 2つの整数の場合

Golang で除算と丸め演算を実装する方法 Golang で除算と丸め演算を実装する方法 Jan 28, 2024 am 08:56 AM

Golang は、Web アプリケーションや分散システム開発で広く使用されているオープンソース プログラミング言語です。 Golang では、除算と丸めは 2 つの方法で実行できます。1 つは整数除算演算子を使用する方法、もう 1 つは数学パッケージの Floor 関数を使用する方法です。整数除算演算子の使用 Golang の整数除算演算子は / です。整数除算演算子を使用すると、2 つの整数を除算して整数の結果を得ることができます。この整数の結果は、除算と丸めの結果です。サンプルコードは次のとおりです:pa

Oracle SQLでの除算演算の例 Oracle SQLでの除算演算の例 Mar 10, 2024 pm 09:12 PM

タイトル: OracleSQL での除算演算の例 OracleSQL データベースでは、除算演算は一般的かつ重要な演算の 1 つです。データを分割する必要がある状況では、OracleSQL が提供する特定の関数と演算子を使用してこれを実現できます。この記事では、OracleSQL で除算演算を実行する方法と具体的なコード例を詳しく紹介します。 OracleSQLでは、除算演算子(/)またはDIV関数を使用して除算演算を実装できます。取り除く

Go 言語の除算演算についての深い理解: 整数の除算と剰余 Go 言語の除算演算についての深い理解: 整数の除算と剰余 Mar 23, 2024 pm 03:39 PM

Go 言語の除算を深く理解する: 整数の除算と剰余 Go 言語の除算は、日常のプログラミングで頻繁に使用される演算子です。除算演算には主に、整数の除算と剰余という 2 つの概念が含まれます。この記事では、Go 言語の除算演算を詳しく掘り下げ、読者がこれら 2 つの概念をよりよく理解できるように具体的なコード例を示します。整数の除算 整数の除算は、2 つの整数を除算し、得られた商も整数になることです。 Go 言語では、/ 演算子を使用して除算演算を実行する場合、両方のオペランドが整数型の場合、次の結果が得られます。

See all articles