[TOC] >[success] # 数字的处理 ~~~ 1.python 中要格外的注意浮点类型的数字进行,相对的 ,因为python底层cpu的浮点运算单元,保存的时候是按照原始表现 形式,例如: a=2.1 b=4.2 print(a+b) # 6.300000000000001 正是因为这种原因,所引入下面处理方法 ~~~ >[danger] ##### 取整操作 --- round ~~~ round(number, ndigits=None) 1.round 中有两个参数,第一个是要处理的值,第二个参数,为正整数时是要保留的小数位,负数是要舍弃的整数数位,从个 位开始 2.round 不像四舍五入,逢五进一,而是默认最近的偶数,例如: "2.4 输出 2 ,2.5输出的2,3.5输出的是4,2.6 输出3,3.6输出的是4" ~~~ ~~~ num1 = round(1.23,1) num2 = round(1.25,1) num3 = round(1.35,1) num4 = round(1.35) num5 = round(105,-1) print(num1, num2, num3, num4,num5) 打印结果: 1.2 1.2 1.4 1 100 ~~~ >[danger] ##### 将数字以固定格式输出展示 --- format ~~~ 1.如果只是将,所得到的数字做展示处理,可以使用format ~~~ ~~~ x=1.233 a = format(x,'0.2f') print(a,type(a)) 打印结果: 1.23 <class 'str'> ~~~ >[danger] ##### 更精准的操作 --- decimal ~~~ 1.当我们在金融等,对数字要求敏感的代码的时候,我们可以为此牺牲掉一些性能,使用decimal 2.当使用decima 对象进行转化求和的时候,对比也需要使用decimal 对象来进行比较 ~~~ ~~~ from decimal import Decimal a = Decimal('4.2') b = Decimal('2.1') c = a+b print(c) print(a+b == 6.3) 打印结果: 6.3 False ~~~ * 对 decimal 进行四舍五入 ~~~ from decimal import Decimal,localcontext a = Decimal('1.3') b = Decimal('1.7') c = a/b print(c) with localcontext() as ctx: ctx.prec = 3 print(a/b) 打印结果: 0.7647058823529411764705882353 0.765 ~~~ >[danger] ##### 对二进制/八进制/十进制的转化 * 将十进制 分别转换成 二进制/八进制/十六进制 ~~~ x = 1234 b = bin(x) o = oct(x) h = hex(x) print(b, o, h,) 打印结果: 0b10011010010 # 二进制 0o2322 # 八进制 0x4d2 # 十六进制 ~~~ * 去掉前缀,将十进制转换成二进制/八进制/十六进制 ~~~ x = 1234 b1 = format(x, 'b') o1 = format(x, 'o') h1 = format(x, 'x') print(b1, o1, h1) 打印结果: 10011010010 2322 4d2 ~~~ * 将 二进制/八进制/十进制转换成 十进制 ~~~ b1 = int('10011010010', 2) o1 = int('2322', 8) h1 = int('4d2', 16) print(b1, o1, h1) 打印结果: 1234 1234 1234 ~~~ >[danger] ##### 分数格式展示 --- fractions * 分数展示 ~~~ from fractions import Fraction a = Fraction(5, 4) b = Fraction(7, 16) print(a,b) 打印结果: 5/4 7/16 ~~~ * 获得分子分母 ~~~ c = a*b print(c) print(c.numerator) print(c.denominator) print(float(c)) 打印结果: 35/64 35 64 0.546875 ~~~ * 小数转换挣分数 ~~~ x = 3.75 print(Fraction(*x.as_integer_ratio())) 打印结果: 15/4 ~~~