来自分数模块 python 问题的分数函数

Fraction function from fractions module python problem

>>> n=F.Fraction(3.56)
>>> n
Fraction(8016407336719483, 2251799813685248)
>>> n=F.Fraction('3.56')
>>> n
Fraction(89, 25)

它是否按预期工作?两个结果都是正确的,但第一个似乎有点过头了。 我在从 codewars 中解决 this kata 时遇到了这个问题。

当你写 3.56 时,这意味着你将数字 3.56 声明为 float 类型。而float类型有一个小偏差,导致它转换为fraction类型时也有一个小偏差。

但是当你写'3.56'时,你声明了一个字符串。 String 的长度是有限的,因此不会有更多的偏差。当你把它转换成字符串时,他们会把它转换成准确的值。

另请参阅:https://www.daniweb.com/programming/threads/506664/mod-unexpected-result

由于二进制浮点数的常见问题,Fraction(floating) 没有 return 预期的分数对象,不同于小数或字符串,被视为精确数字。

但是你可以使用一个名为 "limit_denominator" 的方法来处理这个问题,它有一个默认参数 "max_denominator=1000000",所以你只需要调用:

Fraction(3.16).limit_denominator()

查看文档:https://docs.python.org/3/library/fractions.html#fractions.Fraction.limit_denominator