Python期末复习
Round四舍五入
在Python中,round()
是一个内置函数,用于对浮动数字进行四舍五入。它可以根据指定的小数位数来调整数字。下面是 round()
函数的基本用法和一些详细解释。
基本语法
round(number, ndigits)
- number:要四舍五入的数字。
- ndigits:指定要保留的小数位数(默认为0)。
使用示例
- 不指定小数位数(四舍五入到最接近的整数)
print(round(3.14159)) # 输出 3
print(round(2.71828)) # 输出 3
- 指定保留的小数位数
print(round(3.14159, 2)) # 输出 3.14
print(round(2.71828, 3)) # 输出 2.718
- 负数的小数位数(四舍五入到指定的十位、百位等)
如果 ndigits
为负数,那么就会对数字的小数点左侧的数字进行四舍五入。
print(round(12345, -1)) # 输出 12340,四舍五入到十位
print(round(12345, -2)) # 输出 12300,四舍五入到百位
特殊情况
- 四舍五入的规则:在Python中,
round()
使用的是银行家舍入法(round half to even),即在四舍五入时,如果数字刚好在两个整数的中间,Python会将它四舍五入到最接近的偶数。这样可以减少在大量运算时的累积误差。
print(round(0.5)) # 输出 0(四舍五入到最近的偶数)
print(round(1.5)) # 输出 2(四舍五入到最近的偶数)
小结
round()
函数可以四舍五入浮动数字到指定的小数位数。- 默认情况下,它四舍五入到整数(
ndigits=0
)。 - 可以通过传递负数的
ndigits
来指定四舍五入到小数点左侧。 - 使用银行家舍入法时,数字恰好为中间值时,Python会选择最接近的偶数。
这种用法在处理财务或科学计算时特别有用,可以避免因单次计算中的四舍五入而导致的累计误差。
round(x,6)和.6f 两种四舍五入的区别
主要区别在于 输出格式(有没有固定显示 6 位小数)以及 Python 对浮点数的默认打印行为:
方式 | 四舍五入精度 | 输出时是否保留多余的"0" | 例子(假设 s=2.5) |
---|---|---|---|
s = round(s,6)``print(f"{s}") | 6 位 | 否 | 2.5 |
print(f"{s:.6f}") | 6 位 | 是 | 2.500000 |
细节说明
round(s,6)
只是对浮点数做了"数学上"四舍五入到 6 位- 它返回一个
float
,值在数学上已经精确到 6 位小数。 - 但 Python 打印一个
float
(即str(s)
)时,会采用"最简洁"表示,不会额外补 "0"。
- 它返回一个
f"{s:.6f}"
是格式控制- 它在内部也会做四舍五入(与
round
用同样的"银 行家舍入"原则), - 然后保证输出时总共 6 位小数,不足的用"0"补齐。
- 它在内部也会做四舍五入(与
举例
s = 1.2345
# 你的写法
s = round(s, 6)
print(f"{s}") # 输出: 1.2345
# 我的写法
print(f"{s:.6f}") # 输出: 1.234500
当希望结果严格显示 6 位小数(包括末尾的 0)时,就要用 :.6f
;如果只是想数学上保留 6 位精度,但不介意少几个 0,就可以用 round(s,6)
然后默认打印。
格式化字符串
在 Python 中,%
操作符就是所谓的"旧式"字符串格式化(也叫 printf 风格格式化),它的基本思路是:
"格式字符串" % 值或元组或字典
——其中,格式字符串里用一系列 %
开头的格式说明符来表示要插入的变量占位,后面的值会依次(或按名字)填入这些占位符。下面分步讲解它的用法。
1. 基本语法
print("Hello, %s! You have %d messages." % ("Alice", 5))
%s
:字符串占位符%d
:十进制整数占位符
占位符的顺序要和后面提供的值一致。如果只有一个值,也可以不写元组,直接写单个值:
name = "Bob"
print("Hi, %s!" % name)
2. 常见格式说明符
占位符 | 类型 | 说明 |
---|---|---|
%s | 字符串 | 会把任意对象先用 str() 转为字符串再插入 |
%r | 原始字符串 | 会把任意对象用 repr() 转为带引号的形式插入 |
%d | 十进制整数 | 用于整数 |
%f | 浮点数 | 默认保留 6 位小数 |
%.nf | 浮点数 | 保留 n 位小数,比如 %.1f 保留 1 位小数 |
%x /%X | 十六进制整数 | 小写/大写字母表示 |
%% | 百分号 | 输出一个 % 本身 |
3. 精度与宽度控制
格式说明符可以更进一步指定"宽度"和"对齐":
%[映射键][标志][宽度][.精度]类型
- 宽度(width):指定该字段至少占多少字符,不够则默认左填空格
- 精度(.precision):
- 对浮点数,精度指小数点后保留几位
- 对字符串,精度指最大取多少个字符
- 标志(flags):
-
:左对齐+
:正数前显示+
号0
:数字左边补0
(在指定宽度时)
num = 3.14159
print("默认:%f" % num) # 默认 6 位小数
print("两位:%.2f" % num) # 小数点后 2 位
print("宽度8:%8.2f" % num) # 总宽度 8(含小数点和小数位),右对齐
print("宽度8左对齐:%-8.2f" % num)
print("补0:%08.2f" % num)
4. 元组与字典格式化
-
元组:按位置依次填充
a, b = 10, 20
print("a=%d, b=%d" % (a, b)) -
字典:用
%(key)s
、%(key)d
等方式,通过键名填充data = {"name": "小明", "score": 95}
print("学生:%(name)s,分数:%(score)d" % data)