python3 实现除法结果为整数

问题描述

101/100,想要的结果是1,但是算出来的结果是1.01

解决方案

101 // 100

结果图

补充:python2 与 3:一般除法、除法取整、除法取余、精确减法与精确除法

python2

python2除法

python2的除法,与c语言除法类似,两个整数相除结果一定是整数,除数与被除数有一个是浮点数,结果就是浮点数。因此当两个整数相除,结果又有小数时,由于结果是整数,所以小数部分会被省略,针对这种情况,要实现真正的除法,除数与被除数至少有一个应改为浮点数。(貌似python2.7开始,除法和python3除法一样了,没有仔细考究)

a = 3
b = 2
print a/b
print float(a)/b
print a/float(b)
print float(a)/float(b)
# 结果
1
1.5
1.5
1.5

python2除法取整

加一个int(),进行强制类型转换即可。

a = 4.5
b = 3
print a/b
print int(a/b)
# 结果
1.5
1

python2除法取余

利用%操作即可。

a = 5.5
b = 3
print a % b
# 结果
2.5

python3

python3除法

python3的除法就直接使用"/",就可以了,不存在python2的情况

a = 3
b = 2
print(a/b)
# 结果
1.5

python3除法取整

利用"//"操作
a = 5.5
b = 2
print(a//b)
# 结果
2.0

python3除法取余

利用"%"操作

a = 5.5
b = 2
print(a%b)
# 结果
1.5

python3精确减法与精确除法

我们先看看下面的输出

a = 0.9
b = 1
print(b-a)
print((b-a)/100)
print((0.1)/100)
# 结果
0.09999999999999998
0.0009999999999999998
0.001

python计算要把数字先转为二进制,因为浮点数以二进制形式表示时的有穷性(利用乘K取余法,0.9的二进制无限延展),会导致计算误差。下面摘自python文档原话

On most machines today, floats are approximated using a binary fraction with the numerator using the first 53 bits starting with the most significant bit and with the denominator as a power of two.

这不是只有python才有的bug,也不是你代码的bug,所有的编程语言都会有这个问题,当然可能很多编程语言会使用某些机制来规避这种显示。回到该blog的例子,0.9的二进制表示如下:

0.1110011001100110011001100110011001100110011001100110011

1-0.9的二进制表示为:

0.0001100110011001100110011001100110011001100110011001100

转化过来就是0.09999999999999998

这时候为了实现精确运算,可以使用类decimal。

import decimal
decimal.getcontext().prec = 10 # 取小数点后精度到第10位
a = 0.9
b = 1
print(decimal.Decimal(b)-decimal.Decimal(a))
print((decimal.Decimal(b)-decimal.Decimal(a))/100)
print((0.1)/100)
# 结果
0.1000000000
0.0010000000
0.001

当然,直接使用近似函数round()也是可以的。

a = 0.9
b = 1
print(round(b-a, 10))
print(round((b-a)/100, 10))
print(round((0.1)/100, 10))
# 结果
0.1
0.001
0.001

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 详解Python3除法之真除法、截断除法和下取整对比

    概述 在Python3中,数学运算中的除法被分为两种,分别是"真除法",即无论任何类型相除的结果都会保留小数点,和我们实际的数学运算结果一致,而"截断除法",则是无论任何类型相除的结果都会省略结果的小数部分,剩下最小的能整除的整数部分. 以下是两种除法的基本形式: # 真除法 X / Y # 截断除法 X // Y 真除法 X = 8 Y = 2 Z = 3 print(X / Y) print(X / Z) 示例结果: 4.0 2.6666666666666665

  • 详谈Python2.6和Python3.0中对除法操作的异同

    Python中除法有两种运算符:'/'和'//':有三种类型的除法:传统除法.Floor除法和真除法. X / Y类型: 在Python2.6或者之前,这个操作对于整数运算会省去小数部分,而对于浮点数运算会保持小数部分:在Python3.0中变成真除法(无论任何类型都会保持小数部分,即使整除也会表示为浮点数形式). 示例代码: Python 2.7版本中结果: >>> 3/2 1 >>> 3/2.0 1.5 >>> 4/2 2 >>>

  • Python3中的真除和Floor除法用法分析

    本文实例讲述了Python3中的真除和Floor除法用法.分享给大家供大家参考,具体如下: 在Python3中,除法运算有两种,一种是真除,一种是Floor除法,这两者是有分别的,分别如代码所示: >>>10/4 2.5 >>>10//4 2 >>>10/4.0 2.5 >>>10//4.0 2.0 Python3中一个斜杠的除法是真除,这和其他编程语言是一样的,保留浮点数,Floor除法是去除浮点数保留整数的除法,所以叫做Floor

  • python3 中的几种除法介绍,小数的不同显示

    环境:python3.6.1 一.python3 中的除法 在python3中,一个算数表达式中遇到除法时,有两种不同的除法方式可以选择,分别是/ 和 // .不同的表达式有不同的运行结果,在这里做个详细说明. 1. / 操作符(真除法) 在python3中,/操作符在表达式中时运行的永远是真除法,无论接受任何类型,结果都会保持小数部分. print(4/2) # 2.0 print(4/2.0) # 2.0 print(5/2) # 2.5 2. // 操作符(Floor除法) 在python

  • python3 实现除法结果为整数

    问题描述 101/100,想要的结果是1,但是算出来的结果是1.01 解决方案 101 // 100 结果图 补充:python2 与 3:一般除法.除法取整.除法取余.精确减法与精确除法 python2 python2除法 python2的除法,与c语言除法类似,两个整数相除结果一定是整数,除数与被除数有一个是浮点数,结果就是浮点数.因此当两个整数相除,结果又有小数时,由于结果是整数,所以小数部分会被省略,针对这种情况,要实现真正的除法,除数与被除数至少有一个应改为浮点数.(貌似python2

  • 浅述python2与python3的简单区别

    python2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印 python3:print函数,函数就以为这必须要加上括号才能调用,如果接元组对象,可以接收多个位置参数,并可以打印 1.表达式 在 Python 2 中为获得计算表达式,你会键入: X = raw_input ("enter some values) 但在 Python 3 中,你会键入: X = input ("enter some values") 因此,无论我们输

  • 示例详解Python3 or Python2 两者之间的差异

    每门编程语言在发布更新之后,主要版本之间都会发生很大的变化. 在本文中,Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异,以帮助说明语言的变化. 本教程主要介绍内容: 表达式 Print 选项 Unequal 操作 Range 自动迁移 性能问题 主要的内部事务更改 1.表达式 在 Python 2 中为获得计算表达式,你会键入: 但在 Python 3 中,你会键入: 因此,无论我们输入什么,值都会分配给 2 和 3 中的变量 x.当在 Py

  • 解析python 中/ 和 % 和 //(地板除)

    python / 和 % 和 //(地板除)用于对数据进行除法运算. python中 // 和 / 和 % 简介 python中与除法相关的三个运算符是// 和 / 和 %,下面逐一介绍. "/",这是传统的除法,3/2=1.5 "//",在python中,这个叫"地板除",3//2=1 "%",这个是取模操作,也就是区余数,4%2=0,5%2=1 Python中分为3种除法:1./,2.%,3.//. 1./ 基于 pyth

  • Python基础之数据类型详解

    一.整数 python2中整形可以分为一般整形和长整形,但是在python3中,两者以及合二为一了,只有整形.python中的整形是具有无限精度的(只有内存能放下),可以表示任意位数的数字.例如: >>> 1111_2222_3333_4444_5555_6666_7777_8888_9999_0000 1111222233334444555566667777888899990000 python人性化的地方在于,上面的代码中,我每四位做了一个分割,让数字看起来很清晰.外国人可能更喜欢每

  • Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法

    正如<代码的未来>中所说,为了充分利用多核,并发变成将成为未来发展的趋势,对于并发编程的支持,Erlang确实是不二之选,Erlang在国内仍然较为小众,经典书籍相对也要少很多,最终选择了<Erlang程序设计 第2版>作为了我的第一本Erlang入门书籍. Erlang官方网站:http://www.erlang.org/ Erlang安装: 对于Ubuntu和Debian发行版可采用:apt-get install erlang 来安装: 对于其他 UNIX 和 Linux 平

  • 详细解析Python当中的数据类型和变量

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-

  • Python入门篇之数字

    数字类型   数字提供了标量贮存和直接访问.它是不可更改类型,也就是说变更数字的值会生成新的对象.当然,这个过程无论对程序员还是对用户都是透明的,并不会影响软件的开发方式. Python 支持多种数字类型:整型.长整型.布尔型.双精度浮点型.十进制浮点型和复数. 创建数值对象并用其赋值 (数字对象) 创建数值对象和给变量赋值一样同样简单: 复制代码 代码如下: >>> anInt=1 >>> along=-555555555555L >>> afloa

随机推荐