登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  python教程

Python fractions.Fraction.limit_denominator 怎样用小分母近似测量值

来源:17golang原创

时间:2026-10-27 13:38:39 401浏览 收藏

Fraction(value).limit_denominator(N) 返回分母不大于 N 的最近有理数。测量值若来自十进制文本,可以先用 Fraction("0.3748") 保留该读数的精确数值,再限制分母;如果还要求误差不超过某个容限,需要单独计算差值。

官方文档地址:https://docs.python.org/3/library/fractions.html

先确定测量值的输入含义

把仪器导出的无量纲比例“0.3748”写成易读分数,是一个表示问题。十进制文本、float 和 Fraction 的含义应先分清:从 float 构造 Fraction 会精确保留那个二进制浮点值,而不是自动恢复输入时想表达的十进制小数。

因此,原始读数若本来就是文本,直接从文本构造。测量软件若只提供 float,也可以近似它,但应承认近似对象是收到的浮点值。两者都不能反推出仪器的真实误差或原来不存在的精度。

文本读数和浮点值的Fraction输入关系原创结构图
原创结构图:文本读数与 float 的数值含义不同,构造 Fraction 时应保留输入约定。

同时约束分母与允许误差

这里把两项约束分开:分母上限决定结果是否足够简单,误差容限决定能否采用。示例保留原始分数、近似分数与绝对误差,不把更漂亮的分数直接覆盖原始数据。

from fractions import Fraction

def approximate_reading(text, max_denominator, tolerance_text):
    # 严格限定业务参数,避免把布尔值或小数当作分母上限。
    if type(max_denominator) is not int or max_denominator 

按数值关系推导,0.3748 为 937/2500;本例分母上限 16 时,候选是 3/8,绝对误差为 1/5000,即 0.0002,小于容限 0.0005。这里是数学推导,未声称代码已在本机运行。这个容限只用于示例,并非任何行业的测量标准。

分母上限与绝对误差容限的原创结构图
原创结构图:分母上限约束表示复杂度,误差容限决定业务是否采用。
需求选择
限制分数表示复杂度设置 max_denominator
保证近似差值在业务范围内比较绝对误差与容限
要求固定分母,例如只能取十六分之一倍数另做固定网格舍入,不能仅靠分母上限

保留原始读数和近似策略

分母上限为 16,并不意味着结果一定写成“某数/16”;3/8、1/5 等更小分母也在允许集合中。原始分母已经不超过上限时,不必期待它一定变化。负值也应按同样的绝对误差定义处理,不要把误差符号当作质量判断。

批量处理时,建议记录原始读数、分母上限、容限和采用判定。容限必须和原始读数使用相同单位;比例与百分数混用,会让比较失去意义。没通过容限时,应保留“不采用”的明确状态,由业务决定提高上限还是保持原表示。

增大上限就一定得到真实比例吗?不会,它只扩大可选有理数范围。能否拿近似值替代原始测量记录?建议把它作为派生表示保存,保留原读数便于追溯。这与保留几位小数一样吗?不是,小数位数约束与分母大小约束描述不同的表示集合。

参考:Python Fraction 与 limit_denominator 官方说明。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>