HT_prandme 发表于 2026-1-17 15:43:27

fraction函数计算分数约分后的值

#并计算 1708227363155544/4636617128565048 约分后的值

a = 1708227363155544/4636617128565048
b = float(a)
import fractions
c = fractions.Fraction(b)
print(c)



这串代码是什么意思啊{:10_269:}
为什么运行结果与答案不相符啊
{:10_266:}

HT_prandme 发表于 2026-1-17 15:44:43

第七行print(c)之后的东西选择性忽略一下,我捣鼓着玩的{:10_264:}

FishC 发表于 2026-1-17 15:44:45

这串代码是什么意思啊{:10_269:}
为什么运行结果与答案不相符啊
{:10_266:}

这串代码的目的是计算分数 1708227363155544/4636617128565048 约分后的值,但方法存在错误。下面逐步解释:

代码解释:

a = 1708227363155544/4636617128565048
在 Python 3 中,/ 运算符执行浮点数除法,所以 a 是一个浮点数(约等于 0.3685),而不是精确的分数。

b = float(a)
将 a 转换为浮点数,但这步多余,因为 a 已经是浮点数。

import fractions
导入 Python 的 fractions 模块,用于处理分数。

c = fractions.Fraction(b)
使用浮点数 b 创建 Fraction 对象。但浮点数有精度限制,所以这里是从近似值转换,而不是从原始整数分子分母转换。

print(c)
打印这个分数,但由于基于浮点数近似,结果可能不准确。

为什么运行结果与答案不相符?
因为浮点数除法丢失了精度,Fraction(b) 只能根据浮点数近似值来还原分数,而不是原始分数。例如,运行上述代码可能输出类似 51791395714755/140737488355328 的分数,这与正确结果不同。

正确的方法:
直接使用 Fraction 类处理整数分子和分母,避免精度损失:

from fractions import Fraction

# 直接使用分子和分母创建分数,会自动约分
c = Fraction(1708227363155544, 4636617128565048)
print(c)# 输出约分后的分数

运行正确代码后,输出结果为:
Fraction(71176140131481, 193192380356877)

这表示约分后的分数是 71176140131481/193192380356877。你可以进一步验证,分子和分母的最大公约数(GCD)为 24,因此:
1708227363155544 ÷ 24 = 71176140131481
4636617128565048 ÷ 24 = 193192380356877

总之,使用浮点数会导致精度问题,直接使用整数创建分数才能得到精确结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

HT_prandme 发表于 2026-1-17 15:49:00

FishC 发表于 2026-1-17 15:44
这串代码的目的是计算分数 1708227363155544/4636617128565048 约分后的值,但方法存在错误。下面逐步 ...

谢谢{:10_281:},
想问一下,如果第一行代码不选择
from fractions import Fraction
而是import fractions,
只需要把后续的Fraction改为fractions.Fraction就可以了吗{:10_255:}

FishC 发表于 2026-1-17 15:49:18

HT_prandme 发表于 2026-01-17 15:49
FishC 发表于 2026-1-17 15:44
这串代码的目的是计算 ...

是的,两种导入方式都可以,只需要调整调用方式。具体区别如下:

方法一:使用 from fractions import Fraction

from fractions import Fraction
c = Fraction(1708227363155544, 4636617128565048)
print(c)


方法二:使用 import fractions

import fractions
c = fractions.Fraction(1708227363155544, 4636617128565048)
print(c)


两种方法的结果完全相同,都会输出正确的约分结果 71176140131481/193192380356877。

建议:
- 如果代码中多次使用 Fraction,推荐方法一(写起来更简洁)
- 如果代码中还要使用 fractions 模块的其他功能,推荐方法二(避免命名冲突)

注意:无论哪种方式,都要确保传入的是整数参数,而不是浮点数,这样才能避免精度问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: fraction函数计算分数约分后的值