python数字处理简介
数字类型
python没有unsighed int:The Python int is an abstraction of an integer value, not a direct access to a fixed-byte-size integer.
不过int还是当成sighed int处理的?如0b10000取反~0b10000是-0b10001,虽然前面是用负号表示的,但是和c语言取反后的值是一样一样的,只是表示的很奇怪。
python不同的进制
二进制 0b101,以数字0和字母b打头的表示二进制数 如果出现大于等于2的数 会抛出SyntaxError异常,
八进制 0711,
以数字0打头的数字表示八进制数 如果出现大于等于8的数 会抛出SyntaxError异常,
十进制 123,
正常显示 不能出现字母,
十六进制 0x15,
以数字0和字幕x打头的表示十六进制数 可以出现0-9和abcdef或ABCDEF出现其他数值会抛出SyntaxError异常,
在交互式解释器环境中.python会自动的将不同的进制自动转换为十进制,进行运算.,
>>> 0b101 + 0711 + 123 + 0x15,
606,
不同的进制之间可以运用内置函数进行转换
int(str, base) ==> int,bin(num) ==> str,
oct(num) ==> str,
hex(num) ==> str,
int(str, base) 可以讲字符串转换为整型数,base为相应的进制,
base的范围是2~32 还可以为0,当base=0时,会自动尝试合适的进制,
base如果不给,缺省情况下会吧字符串向10进制转换,,
这时如果字符串中有字母则会抛出ValueError异常,
>>> bin(5),
'0b101',
>>> int('0x210', 0),
528,
>>> int('0x210', 16),
528,
python最大数
最大整数
Python的正整数类型所支持的最大整数。
python的最大整数:sys.maxsize (py3) sys.maxint (py2)[py3中无定义]
usually 2**31 - 1(2147483647) on a 32-bit platform and 2**63 - 1 (=9223372036854775807) on a64-bit platform
最小整数:-sys.maxsize-1 -2**63 (=-9223372036854775808) on 64位系统
最大浮点数
sys.float_info:
>>> import sys
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2
250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsil
on=2.2204460492503131e-16, radix=2, rounds=1)
>>> sys.float_info.max
1.7976931348623157e+308
如果这还不够大,总是有正无穷大:
>>> infinity = float("inf")
>>> infinity
inf
>>> infinity / 10000
inf
该long类型有无限的精度,所以只受限于你的内存大小。
一般定义的epsilon
epsilon=pow(e,-6)或者1.0e-6
皮皮blog
python数字处理模块主要有math模块、decimal模块、random模块等。
python数学运算和转换内置函数
[ python函数: 内置函数]math模块
>>> import math>>>dir(math) #这句可查看所有函数名列表
>>>help(math) #查看具体定义及函数0原型
math模块定义了两个常量
e = 2.718281828459045pi = 3.141592653589793
math模块常用函数
ceil(x) 取顶floor(x) 取底
fabs(x) 取绝对值
factorial (x) 阶乘
hypot(x,y) sqrt(x*x+y*y)
pow(x,y) x的y次方
sqrt(x) 开平方
log(x)
log10(x)
trunc(x) 截断取整数部分
isnan (x) 判断是否NaN(not a number)
degree (x) 弧度转角度
radians(x) 角度转弧度
皮皮blog
decimal模块
decimal模块简介
默认地,浮点数学缺乏精确性。decimal 模块提供了一个 Decimal 数据类型用于浮点数计算。相比内置的二进制浮点数实现 float这个类型有助于金融应用和其它需要精确十进制表达的场合,控制精度,控制舍入以适应法律或者规定要求,确保十进制数位精度,或者用户希望计算结果与手算相符的场合。Decimal 重现了手工的数学运算,这就确保了二进制浮点数无法精确保有的数据精度。 高精度使 Decimal 可以执行二进制浮点数无法进行的模运算和等值测试。
直接使用float导致的错误示例
a = '39.89245' b = float(a) * 10000 print(b) print(int(b)) 398924.49999999994 398924
decimal模块使用
>>> from decimal import Decimal>>> Decimal('0.1') / Decimal('0.3')
Decimal('0.3333333333333333333333333333')
>>> from decimal import getcontext
>>> getcontext().prec = 4 #设置全局精度
>>> Decimal('0.1') / Decimal('0.3')
Decimal('0.3333')
from decimal import Decimal a = '39.89245' b = Decimal(a) * 10000 print(b) print(int(b)) 398924.50000 398924
from decimal import Decimal _ = lambda x: Decimal(str(x)) print(0.1 + 0.1 + 0.1 - 0.3) print(_(0.1) + _(0.1) + _(0.1) + _(-0.3))
fractions分数类型
构造>>> from fractions import Fraction
>>> Fraction(16, -10) #分子分母
Fraction(-8, 5)
>>> Fraction(123) #分子
Fraction(123, 1)
>>> Fraction('3/7') #字符串分数
Fraction(3, 7)
>>> Fraction('-.125') #字符串浮点数
Fraction(-1, 8)
>>> Fraction(2.25) #浮点数
Fraction(9, 4)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1')) #Decimal
Fraction(11, 10)
计算
>>> from fractions import Fraction
>>> a = Fraction(1,2)
>>> a
Fraction(1, 2)
>>> b = Fraction('1/3')
>>> b
Fraction(1, 3)
>>> a + b
Fraction(5, 6)
>>> a - b
Fraction(1, 6)
但是decimal也解决不了这个问题:
print(Decimal(0.1)**Decimal(3.0)) 001000000000000000166533453694from: python模块:数字处理_lambda x:decimal(str(x['value']))_-柚子皮-的博客-CSDN博客
ref: