db2四舍五入函数 保留整数_14.数值类型常用的典型内置函数 - 数据类型(五)...

d8893579f8f10802f98f68ac324ad273.png
本节将对数值类型涉及到的、常用的内置函数做一个简单介绍,学会了对这些函数的熟练、正确使用,可以极大地提高编程的质量、效率。

1 abs函数

abs(x)
  • 该函数返回数字的绝对值;
  • 传入的参数可以是数值表达式、整数或者浮点数。
print('“2-8”的绝对值:',abs(2-8))
print('“-3.14”的绝对值:',abs(-3.14))

输出的结果如下所示:

“2-8”的绝对值: 6
“-3.14”的绝对值: 3.14

2 max与min函数

max(x, y, z...)
min((x, y, z...)
  • max函数返回给定参数中的最大值;
  • min函数返回给定参数中的最小值;
  • 传入的参数可以是数值表达式、整数或者浮点数。
print('最大值:',max(-2, 8.9 + 6, 256 - 300, 314, 3.14*10))
print('最小值:',min(-2, 8.9 + 6, 256 - 300, 314, 3.14*10))

输出的结果如下所示:

最大值: 314
最小值: -44

3 round函数

round(x, n)
  • 该函数返回传入的x数值(浮点型或整型)的四舍五入值;
  • 参数n表示对x进行四舍五入时保留/参考的数位精度;
  • 参数n可以不传入,此时其默认值为0,但若传入的话,则必须为整型;
  • 当n为0时,返回的结果为整型,n为负整数或正整数时,返回值的数值类型与传入的x数值的类型一样(整型或者浮点型);
  • 若n为正整数,则表示四舍五入时保留/参考的小数点后的位数;
  • 若n为负整数,-1表示基于十位四舍五入(舍弃个位)、-2表示基于百位四舍五入(舍弃个位和十位),依次类推;
  • round返回的是数值(整型或者浮点型),对于数值,我们关注的是准确性,因为数值是用于算术运算的,比如round(31415.0, 2),得到的结果是“31415.0”,是完全符合要求的,既按约定返回了浮点型(因为传入的参数也是浮点型),同时,也完全满足小数点后2位的数位精度(或者说有效位数),因为对于数值来说,“31415.0”与“31415.00”是完全相等的;
  • 但需要注意的是:上述谈到的“数值”的有效位或者精准度,与我们平时提到的“保留多少有效位”,两者的概念是不一样的,或者说至少在编程方面,两者是不同层面的事情,前者关注的是“数值”的精准度,后者用于显示或输出,关注的是对数值的字符串格式化;
  • 因此,若数值四舍五入后,用于算术表达式计算,我们则采用round函数对数值进行四舍五入处理,要是仅用于按要求保留有效位显示输出,则直接采用字符串格式化输出即可,例如:f'{31415:.2f}',输出为“31415.00”。

如下代码所示,各打印了两个值,前者按round调用后返回的真实数值输出,后者按字符串格式化输出。

print('对3.14159265保留小数点后3位、四舍五入的结果:',round(3.14159265, 3), f'{3.14159265:0.3f}')
print('对31415.9265仅保留整数部分、四舍五入的结果:',round(31415.9265), f'{31415.9265:.0f}')
print('对31415.9265基于百位进行四舍五入的结果:',round(31415.9265, -2), f'{round(31415.9265, -2):.0f}')
print('对31415基于百位进行四舍五入的结果:',round(31415, -2), f'{round(31415, -2):.0f}')
print('对31415参考小数点后2位、四舍五入的结果:',round(31415, 2), f'{31415:.2f}')
print('对31415.0参考小数点后2位、四舍五入的结果:',round(31415.0, 2), f'{31415.0:.2f}')

输出的结果如下所示:

对3.14159265保留小数点后3位、四舍五入的结果: 3.142 3.142
对31415.9265仅保留整数部分、四舍五入的结果: 31416 31416
对31415.9265基于百位进行四舍五入的结果: 31400.0 31400
对31415基于百位进行四舍五入的结果: 31400 31400
对31415参考小数点后2位、四舍五入的结果: 31415 31415.00
对31415.0参考小数点后2位、四舍五入的结果: 31415.0 31415.00

另外,更重要的,对于Python的这个round内置函数我们在使用时要需要注意以下两点:

  • 四舍五入运算必然涉及到进位或者不进位,比如,我们对数值x(如1.45)进行四舍五入运算,假设进位得到A(如1.5,保留小数点后1位)、若不进位得到B(如1.4,保留小数点后1位),有时候会出现一种特别情况,x正好在A与B的中间,即离A和B的距离相同,这种情况下一般是碰到了“5”,此时,究竟取A还是取B呢?Python的处理是取“偶数”(如,1.4的最后一位4为偶数),跟我们传统的“五入”做法是不一样的。如下所示:
print('为了促成偶数,放弃“五入”:',round(0.5),round(-0.5),round(2.5),round(125,-1),round(1.45,1))
print('正好促成偶数,保留“五入”:',round(1.5),round(-1.5),round(1.5),round(135,-1),round(1.35,1))

输出的结果如下所示:

为了促成偶数,放弃“五入”: 0 0 2 120 1.4
正好促成偶数,保留“五入”: 2 -2 2 140 1.4
  • 而且上述规则还存在另外的挑战,当碰到了“5”且又遇上了特别的浮点数时,情况会变得更加复杂,例如,round(6.675, 2)给出的结果是6.67,而不是按上述规则应该得出的6.68,这并不是Python语言的Bug或问题,而是因为:计算机本身对浮点数进行十进制至二进制转换时,存在着一些十进制小数不能以二进制精确地表示出来(相当于除法中除不断的情况),而计算机用来存储数字的二进制位数是有限的,必然导致后面的数位被舍弃,于是,x(比如,当前的6.675)不再是我们十进制中看到的,离A(即6.68)和B(即6.67)的距离完全相等,而是变小了些,离B更近了,于是被round函数选中了6.67。
print('受计算机精度影响的四舍五入:',round(6.675,2),round(1.355,2))

输出的结果如下所示:

受计算机精度影响的四舍五入: 6.67 1.35

需要说明的是,上述两点特殊情况,对于数值的字符串格式化会产生同样的影响,知道了上述规则和原因后,遇到类似的特殊情况,我们就不会再感到不解或者迷惑了,甚至在特殊的严格场合,我们可能需要进行特殊处理,规避上述情况的发生。如下所示,我们来看看字符串格式化对上述特殊数值的输出情况。

print('旧式格式化操作符:')
print('%.0f %.1f %.2f' % (-0.5,1.45,6.675))
print('%.0f %.1f' % (-1.5,1.35))

print('nstr.format()的格式化:')
print('{:.0f} {:.1f} {:.2f}'.format(-0.5,1.45,6.675))
print('{:.0f} {:.1f}'.format(-1.5,1.35))

print('nf-string格式化:')
print(f'{-0.5:.0f} {1.45:.1f} {6.675:.2f}')
print(f'{-1.5:.0f} {1.35:.1f}')

输出的结果如下所示:

旧式格式化操作符:
-0 1.4 6.67
-2 1.4

str.format()的格式化:
-0 1.4 6.67
-2 1.4

f-string格式化:
-0 1.4 6.67
-2 1.4

4 pow函数

pow(x,y,z)
  • 一般通过pow(x,y)调用,返回x的y次幂,此时与幂运算符等价:x ** y;
  • 三个参数都必须为数值类型(整型或浮点型);
  • 若传入z,则相当于:(x ** y) % z,即对z取余,仅当x、y均为整型,且y必须为非负整数时有效,且强烈建议此种情况下调用该函数,该函数的处理效率远比(x ** y) % z高效。
print('2的3次幂:',pow(2, 3), 2**3)
print('2的-3次幂:',pow(2, -3), 2**-3)
print('2的1/2次幂:',pow(2, 1/2), 2**(1/2))
print('2的-1/2次幂:',pow(2, -1/2), 2**(-1/2))
print('pow(2,10,1000):',pow(2,10,1000), 2**10%1000)
print('***效率比较:***')
%timeit pow(12345,23456,34)
%timeit 12345**23456%34

输出的结果如下所示:

2的3次幂: 8 8
2的-3次幂: 0.125 0.125
2的1/2次幂: 1.4142135623730951 1.4142135623730951
2的-1/2次幂: 0.7071067811865476 0.7071067811865476
pow(2,10,1000): 24 24
***效率比较:***
930 ns ± 15.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
5.83 ms ± 78.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

5 进制转换函数

bin(x)
oct(x)
hex(x)
  • bin用于把传入的整数转换成一个前缀为“0b”的二进制字符串;
  • oct用于把传入的整数转换成一个前缀为“0o”的八进制字符串;
  • hex用于把传入的整数转换成一个前缀为“0x”的十六进制字符串(采用小写字母);
  • 三个函数的传入参数必须为整数(0、正整数或者负整数)或者最终结果为整数的算术表达式;
  • 另外,必须注意,三个函数返回的都是字符串,而不是原来的数值(整型)。
Pythonprint('3×5所得结果的二进制表示:',bin(3 * 5))
print('-15的八进制表示:',oct(-15))
print('15的十六进制表示:',hex(15))
x = hex(15) #注意:hex返回的是15这个整数的十六进制字符串,x是字符串类型。
y = 0xf    #注意:这里采用的是整数的十六进制表示法(没有引号),y最终是整型。
print("x:",type(x),x)
print("y:",type(y),y)

输出的结果如下所示:

3×5所得结果的二进制表示: 0b1111
-15的八进制表示: -0o17
15的十六进制表示: 0xf
x: <class 'str'> 0xf
y: <class 'int'> 15

6 类型转换函数

int(x,base=10)
float(x)
bool(x)
  • int把传入的x转换成整数返回,x可以是数字类型或字符串类型;若x为字符串类型,base参数表示该字符串采用的进制形式,比如2、8、16进制等,默认为10进制;若不传入x,返回0;
  • float把传入的x转换成浮点数,x可以是数字类型或字符串类型;若x为字符串类型,其必须采用十进制形式,或者为“inf”(表示正无穷大)、“-inf”(表示负无穷的)、“NaN”(非数字);若不传入x,返回0.0;
  • bool对传入的x进行评价测试,返回一个布尔值(True或者False),如果x是假或者不传入x,返回False,其他情况返回True。
print(int(),int(-1.6), int("0xf",16), int("-f",16), int("-15"))
print(float(),float(3), float(-5e-2))
print("字符串转浮点数:", float("-3.14"),float("-5e-2"))
print("特殊浮点数:", float("NaN"), float("-inf"), float("inf"))
print("返回False的情况:", bool(), bool(0), bool(0.0), bool(''))
print("返回True的情况:", bool(2), bool(0.2), bool(' '), bool('inf'), bool('-inf'), bool('NaN'))

输出的结果如下所示:

0 -1 15 -15 -15
0.0 3.0 -0.05
字符串转浮点数: -3.14 -0.05
特殊浮点数: nan -inf inf
返回False的情况: False False False False
返回True的情况: True True True True True True

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值