ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python浮点数精度问题

Python浮点数精度问题 一、f-string格式化在字符串前加f然后在{}中使用:.2f表示保留2 位小数。score 89.6666666 print(f平均分{score:.2f}) # 输出平均分89.67:.1f→ 保留 1 位小数:.2f→ 保留 2 位小数:.3f→ 保留 3 位小数二、round()函数round()函数对浮点数进行四舍五入包含2个参数语法是round(浮点数保留精度)score 89.6666666 print(f平均分{round(score, 2)}) # 输出平均分89.67⚠️ 注意round() 有时会有浮点数精度陷阱例如 round(2.675, 2) 会得到 2.67 而不是 2.68因为十进制的2.675在二进制中是一个无限循环小数实际存储的是2.67499...所以四舍五入得到2.67要想保证准确的四舍五入可以使用decimal模块三、Decimal模块decimal模块进行十进制精确计算适合财务、统计场景1、精度损失问题#修改前 xfloat(input())#0.5 yfloat(input())#0.4 print(x-y,x-y) #输出为0.999999998这是二进制float无法精确表示所有小数 #修改后 from decimal import Decimal x Decimal(input()) #0.5 y Decimal(input()) #0.4 print(x-y , x - y) #正确输出0.12、浮点数精度问题将数字转为 Decimal然后 quantize 指定精度quantize() 的基本用法Decimal(数字).quantize(Decimal(精度格式), rounding四舍五入模式)Decimal(0.00)中的数字决定了保留几位小数精度格式格式含义Decimal(1)保留到整数位Decimal(0.1)保留 1 位小数Decimal(0.01)保留 2 位小数Decimal(0.001)保留 3 位小数Decimal(0.000)保留 3 位小数Decimal(0.0000)保留 4 位小数常用的四舍五入模式模式说明ROUND_HALF_UP四舍五入最常用ROUND_HALF_DOWN五舍六入银行家舍入ROUND_HALF_EVEN银行家舍入.5 时取偶数ROUND_UP始终向上进位ROUND_DOWN始终向下舍去应用如下from decimal import Decimal, ROUND_HALF_UP # 将数字转为 Decimal然后 quantize 指定精度 num Decimal(2.675) rounded num.quantize(Decimal(0.00), roundingROUND_HALF_UP) print(rounded) # 输出2.68 ✅
返回列表