MST

星途 面试题库

面试题:Python数值运算类型自动提升机制下的精度问题

在Python数值运算类型自动提升机制中,涉及浮点数运算时可能会出现精度问题。请举例说明这种精度问题是如何由于类型自动提升产生的,并阐述至少一种解决该精度问题的方法。
31.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

精度问题示例

在Python中,由于浮点数在计算机中是以二进制存储的,某些十进制小数无法精确表示为二进制小数,从而在运算时因类型自动提升出现精度问题。例如:

a = 0.1
b = 0.2
print(a + b)  

按照数学运算,0.1 + 0.2 应该等于 0.3,但实际输出为 0.30000000000000004。这是因为 0.10.2 都不能精确表示为二进制小数,在类型自动提升进行加法运算时,就产生了精度误差。

解决方法

  1. 使用 decimal 模块decimal 模块提供了十进制浮点运算支持,可以避免浮点数运算的精度问题。
from decimal import Decimal

a = Decimal('0.1')
b = Decimal('0.2')
print(a + b)  

这里将字符串形式的小数传入 Decimal 构造函数,运算结果会是精确的 0.3

  1. 使用 round 函数进行四舍五入:对于一些对精度要求不是特别高的场景,可以使用 round 函数对结果进行四舍五入。
a = 0.1
b = 0.2
result = round(a + b, 1)  
print(result)  

round 函数的第二个参数指定保留的小数位数,这里保留一位小数,输出为 0.3。但这种方法只是对结果进行近似处理,并非真正解决精度问题。