python基础之数字类型

论坛 期权论坛 期权     
爬虫俱乐部 Stata&   2019-7-27 14:38   5866   0
本文作者:陈志玲
文字编辑:宁刘莹
技术总编:张   邯

爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~
详细培训大纲及报名方式,请点击文末阅读原文呦~
本文介绍的是在python的内置类型中最基础的数字类型——整数型、浮点型、复数型,然后介绍如何通过int()、float()、complex()函数转化数据类型。
1.int()
整数型就是我们常说的数学中的整数,可正可负。不带修饰的整数字面值会生成整数。
函数int()可以将指定进制的数字型字符串或者数字转化为整型。其语法结构为:

  1. int(x,base)
复制代码
其中的x可以是数字也可以是字符串参数,可以省略。但字符串参数仅能包含在指定进制下所涵盖的字符,不能含有小数点、连字符等。base是进制数,代表着x当前的进制是什么,也可以省略,省略时默认为十进制。

当x和base两个参数都省略时,int()返回值为0,命令行和结果如下所示:
  1. In [1]: int()
复制代码
  1. Out[1]: 0
复制代码
将浮点数x转换成整数,此时默认x为十进制(注意int是取整,而不是四舍五入),下面举个例子,命令行和结果如下所示:
  1. In [2]: int(0.60)
复制代码
  1. Out[2]: 0
复制代码
当x为字符串时,使用int()函数主要是将其他进制转换为十进制,下面举个将十六进制的字符串"15"转换成十进制的例子,命令行和结果如下所示:
  1. In [3]: int('15',16)
复制代码
  1. Out[3]: 21
复制代码
可以看到,在十六进制下的“15”,通过计算 1*16+5得到了十进制下的 21.
我们再试着转换"0xFFFF",结果如下:
  1. int("0xFFFF",16)
复制代码
  1. Out[1]: 65535
复制代码
另外当x为字符串时只能转换整数,不能转化小数:
  1. int("1.2")
复制代码
  1. ValueError: invalid literal for int() with base 10: '1.2'
复制代码
       所以当我们处理类似数据时,一般选择下面介绍的float()函数进行数据转换。
当x为负小数时,int(x)是将负小数x转化为负整数,规则是向上取整,当x=-6.6,命令行和结果如下所示:
  1. In [4]: int(-6.6)
复制代码
  1. Out[4]: -6
复制代码
2.float()
浮点数就是数学中的小数,股票价格就是常见的浮点数。包含小数点等数字字面值会生成浮点数。在python中浮点数通常使用double来实现,并且浮点数的取值范围存在一定的限制,小数精度也存在限制。
函数float()返回从数字或者字符串中生成的浮点数,语法结构为:
  1. float(x)
复制代码
如果参数x是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,可选的符号有'+'和'-',之前也可以有空格。
使用float()将整型转换成浮点型,命令行和结果如下所示:
  1. In [5]: float(90)
复制代码
  1. Out[5]: 90.0
复制代码
使用float()将内容为十进制整型数值的字符串转换成浮点型,如果字符串前有空格和“+”,也不会影响我们创建的值,命令行和结果如下所示:
  1. In [6]: float('  +698')
复制代码
  1. Out[6]: 698.0
复制代码
浮点数和整数在计算机里的存储方式是不同的,整数运算总是很精确的,但浮点数运算可能会存在误差。例如:
  1. In [7]: 0.1+0.2
复制代码
  1. Out[7]: 0.30000000000000004
复制代码
浮点数运算是先将十进制转换成二进制,然后计算,最后再将二进制转换成十进制,出现误差的原因就在于十进制转换成二进制上。浮点数0.1转换成二进制后,将不会精确地等于十进制的0.1,同时,计算机存储位数也是有限的,所以会导致上述现象。但并不是所有的浮点数都会出现这种情况。但是,在一些比如金融领域这样的场合,一些小的误差,也是不能容忍的。
为解决上述浮点数float精确问题,我们可以调用decimal模块,即十进制模块。decimal模块在我们之前的推文中也有介绍(《decimal 进行无误差浮点数计算》),这里不再详细介绍了。相比于浮点数类型float,decimal类型更有助于需要精确十进制的场合。所以在涉及有关钱的数据且有数据精度要求时,会使用decimal,而不用float。用一个简单的代码来说明怎样使用decimal转换数据类型:
  1. In [8]: from decimal import Decimal
复制代码
  1. ...: r1=Decimal("0.1")+Decimal("0.2")
复制代码
  1. ...: print(r1)
复制代码
  1. 0.3
复制代码
3.complex()
complex是我们要介绍的最后一个数字类型,复数型也和我们在高中数学中学习的复数是一样的,它有实部和虚部两个部分,分别以一个浮点数表示。在数字字面值末尾加上'j'或'J'会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。
函数complex()的语法结构为:
  1. complex(real[,imag])
复制代码
第一个参数可以是数字或者字符串,代表复数的实部,可以省略;第二个参数只能是数字也可以省略,该参数代表复数的虚部;当两者都省略时,返回的是0j。在python中复数有两种定义方式:一种是直接定义a+bj;另一种是调用complex函数。
  1. In [9]: 1+2j
复制代码
  1. Out[9]: (1+2j)
复制代码
  1. In [10]: complex(1,2)
复制代码
  1. Out[10]: (1+2j)
复制代码
      我们可以通过z.real获得实部,z.imag获得虚部:
  1. In [11]: z=1+2j
复制代码
  1.    ...: z.real
复制代码
  1. Out[11]: 1.0
复制代码
  1. In [12]: z.imag
复制代码
  1. Out[12]: 2.0
复制代码
4.混合运算
看到这里,我相信各位善于思考的小伙伴肯定有一个疑问,上述三种类型是否可以混合运算,如果可以那结果会是怎样的?其实以上三种数字类型之间可以进行混合运算,当一个二元运算符用于不同数字类型的操作数时,具有“较窄”类型的操作数会被扩展为另一个操作数的类型,整数比浮点数更窄,浮点数又比复数更窄。即三者之间运算关系为:
整数型->浮点型->复数型
       我们可以通过type()函数获得数据的类型,为了更好展示上述混合运算的过程,下面举个例子,命令行和结果如下所示:
  1. In [13]: a=1+0.2
复制代码
  1. ...: type(a)
复制代码
  1. Out[13]: float
复制代码
  1. In [14]: b=1.2+1j
复制代码
  1. ...: type(b)
复制代码
  1. Out[14]: complex
复制代码


对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!


往期推文推荐

Stata16调用python——绘制词云图
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:20
帖子:4
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP