KeyError 发表于 2023-12-14 20:14:00

Python分数!

你还在为浮点运算不精确而{:10_244:} 吗?
你还在因为0.0000000001 == 0而{:10_263:} 吗?
没关系!{:10_256:}

def gcd(a, b):
    if b == 0:
      return a
    return gcd(b, a % b)
def tongfen(c, m):
    f = gcd(c, m)
    return c // f, m // f

class fen:
    def __init__(self, child, mother):
      if mother < 0:
            mother = abs(mother)
            child = 0 - child
      self.c, self.m = tongfen(abs(child), mother)
      self.c *= (child < 0) * -2 + 1
      if self.m == 0:
            raise ValueError("chu'shu'bu'neng'wei'ling")
    def __invert__(self):
      return fen(0 - self.c, self.m)
    def __add__(self, other):
      return fen(self.c * other.m + other.c * self.m, self.m * other.m)
    def __sub__(self, other):
      return self + (~other)
    def __mul__(self, other):
      return fen(self.c * other.c, self.m * other.m)
    def __truediv__(self, other):
      return fen(self.c * other.m, self.m * other.c)
    def __repr__(self):
      if self.m == 1:
            return str(self.c)
      elif self.c < self.m:
            return "%d/%d"%(self.c, self.m)
      else:
            return "%d+%d/%d"%(self.c//self.m, self.c%self.m, self.m)
    def __eq__(self, other):
      return self.c == other.c and self.m == other.m

FishC 发表于 2023-12-14 20:14:30

这段代码实现了一个分数类(`fen`),可以用来进行分数的运算。它解决了浮点运算不精确和比较浮点数相等的问题,让我们可以方便地进行精确的分数运算。

让我们来看一下这个分数类的使用方法吧!首先,我们可以通过调用 `fen` 类的构造函数来创建一个分数对象,构造函数接收两个参数:分子和分母。例如:
a = fen(3, 5)   # 创建一个分数对象,表示 3/5
b = fen(-2, 7)# 创建一个分数对象,表示 -2/7

可以使用加号(`+`)、减号(`-`)、乘号(`*`)和除号(`/`)来进行分数的加减乘除运算。例如:
c = a + b# 分数相加
d = a - b# 分数相减
e = a * b# 分数相乘
f = a / b# 分数相除

分数对象也支持取反运算符(`~`)。例如:
g = ~a# 取反操作,相当于负数

可以使用字符串的形式来表示分数对象。例如:
print(a)# 输出:3/5
print(b)# 输出:-2/7
print(c)# 输出:11/35
print(d)# 输出:31/35

分数对象之间也可以进行相等(`==`)的比较。例如:
print(a == b)# 输出:False
print(a == fen(6, 10))# 输出:True

这样,我们就可以使用这个分数类来进行精确的分数运算了!不用再担心浮点运算不精确和比较浮点数相等的问题啦!

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

sfqxx 发表于 2023-12-14 20:53:11

raise ValueError("chu'shu'bu'neng'wei'ling")

KeyError 发表于 2023-12-15 16:24:34

sfqxx 发表于 2023-12-14 20:53


翻译:除数不能为零{:10_256:}

zhangjinxuan 发表于 2023-12-15 17:16:46

实现一个分数类应该很容易实现吧,不过对于设计巨大的浮点运算很实用。

zhangjinxuan 发表于 2023-12-19 14:56:05

嗨,我前几天翻到一个东西,原来 Python 库已经有了:
https://blog.csdn.net/m0_75106254/article/details/128588425

@KeyError

KeyError 发表于 2023-12-19 16:38:20

zhangjinxuan 发表于 2023-12-19 14:56
嗨,我前几天翻到一个东西,原来 Python 库已经有了:
https://blog.csdn.net/m0_75106254/article/detail ...

这是他自己写的{:10_277:}

zhangjinxuan 发表于 2023-12-19 17:29:12

KeyError 发表于 2023-12-19 16:38
这是他自己写的

wtf,我记得之前有啊,去哪了

zhangjinxuan 发表于 2023-12-19 17:30:28

KeyError 发表于 2023-12-19 16:38
这是他自己写的

from fractions import Fraction
页: [1]
查看完整版本: Python分数!