天天看点

python模块:数字处理python数字处理简介python数学运算和转换内置函数math模块decimal模块

http:// blog.csdn.net/pipisorry/article/details/37055183

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

on a 32-bit platform and

2**63 - 1

(=9223372036854775807) on a64-bit platform

最小整数:-sys.

maxsize

+1     

-sys.maxint+1

python最大浮点数

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类型有无限的精度,所以只受限于你的内存大小。

[maximum float in python]

[python精度问题]

python定义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.718281828459045

pi = 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))
001000000000000000166533453694
      

from: http://blog.csdn.net/pipisorry/article/details/37055183

ref: