在日常编程或数学计算中,我们经常会遇到需要精确表示和计算分数的情况。如果直接使用浮点数(如 0.1 + 0.2),可能会因为计算机的二进制表示方式导致精度丢失。这时候,Python 的 fractions 模块 就派上用场了!
fractions 是 Python 标准库中的一个模块,专门用于处理有理数(即可以表示为两个整数之比的数,如 3/4、-7/2 等)。它提供了一个 Fraction 类,可以精确地表示和操作分数,避免浮点数带来的精度问题。
首先,我们需要从 fractions 模块中导入 Fraction 类:
from fractions import Fraction 创建 Fraction 对象有多种方式:
# 创建 3/4f1 = Fraction(3, 4)print(f1) # 输出: 3/4 f2 = Fraction('3/4')print(f2) # 输出: 3/4# 也可以从小数字符串创建f3 = Fraction('0.75')print(f3) # 输出: 3/4 虽然可以传入浮点数,但由于浮点数本身可能存在精度问题,建议优先使用字符串或整数对。
# 不推荐:可能产生意外结果f4 = Fraction(0.1)print(f4) # 输出: 3602879701896397/36028797018963968# 推荐:使用字符串f5 = Fraction('0.1')print(f5) # 输出: 1/10 使用 Fraction 对象进行加减乘除非常简单,就像操作普通数字一样。Python 会自动保持结果为最简分数形式。
from fractions import Fractiona = Fraction(1, 3) # 1/3b = Fraction(2, 5) # 2/5print(a + b) # 11/15print(a - b) # -1/15print(a * b) # 2/15print(a / b) # 5/6 可以看到,所有运算结果都是精确的分数,不会出现像 0.1 + 0.2 = 0.30000000000000004 这样的问题。
.numerator:获取分子.denominator:获取分母.limit_denominator(max_denominator=1000000):将浮点数近似为分母不超过指定值的最接近分数f = Fraction(22, 7)print(f.numerator) # 22print(f.denominator) # 7# 将圆周率近似为分数import mathpi_approx = Fraction(math.pi).limit_denominator(1000)print(pi_approx) # 355/113(非常接近π) Python fractions模块 在以下场景特别有用:
通过本文,你已经学会了如何使用 Python 的 fractions 模块进行精确的分数计算和有理数运算。相比浮点数,Fraction 能确保计算结果的准确性,是处理分数问题的理想工具。无论你是初学者还是有经验的开发者,掌握这个标准库模块都能让你的代码更加健壮和可靠。
记住:当你需要精确表示像 1/3、2/7 这样的数值时,不要用浮点数,而是使用 Fraction!
希望这篇教程对你有帮助。快去试试吧!
本文由主机测评网于2025-12-02发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122061.html