鱼C论坛

 找回密码
 立即注册
查看: 1098|回复: 8

[作品展示] Python分数!

[复制链接]
发表于 2023-12-14 20:14:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你还在为浮点运算不精确而 吗?
你还在因为0.0000000001 == 0而 吗?
没关系!

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-14 20:14:30 | 显示全部楼层
这段代码实现了一个分数类(`fen`),可以用来进行分数的运算。它解决了浮点运算不精确和比较浮点数相等的问题,让我们可以方便地进行精确的分数运算。

让我们来看一下这个分数类的使用方法吧!首先,我们可以通过调用 `fen` 类的构造函数来创建一个分数对象,构造函数接收两个参数:分子和分母。例如:
a = fen(3, 5)   # 创建一个分数对象,表示 3/5b = fen(-2, 7)  # 创建一个分数对象,表示 -2/7
可以使用加号(`+`)、减号(`-`)、乘号(`*`)和除号(`/`)来进行分数的加减乘除运算。例如:
c = a + b  # 分数相加d = a - b  # 分数相减e = a * b  # 分数相乘f = a / b  # 分数相除
分数对象也支持取反运算符(`~`)。例如:
g = ~a  # 取反操作,相当于负数
可以使用字符串的形式来表示分数对象。例如:
print(a)  # 输出:3/5print(b)  # 输出:-2/7print(c)  # 输出:11/35print(d)  # 输出:31/35
分数对象之间也可以进行相等(`==`)的比较。例如:
print(a == b)  # 输出:Falseprint(a == fen(6, 10))  # 输出:True
这样,我们就可以使用这个分数类来进行精确的分数运算了!不用再担心浮点运算不精确和比较浮点数相等的问题啦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-14 20:53:11 | 显示全部楼层
raise ValueError("chu'shu'bu'neng'wei'ling")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 16:24:34 | 显示全部楼层

翻译:除数不能为零
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 17:16:46 | 显示全部楼层
实现一个分数类应该很容易实现吧,不过对于设计巨大的浮点运算很实用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 14:56:05 | 显示全部楼层
嗨,我前几天翻到一个东西,原来 Python 库已经有了:
https://blog.csdn.net/m0_75106254/article/details/128588425

@KeyError
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 16:38:20 | 显示全部楼层
zhangjinxuan 发表于 2023-12-19 14:56
嗨,我前几天翻到一个东西,原来 Python 库已经有了:
https://blog.csdn.net/m0_75106254/article/detail ...

这是他自己写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 17:29:12 | 显示全部楼层

wtf,我记得之前有啊,去哪了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 17:30:28 | 显示全部楼层
from fractions import Fraction

评分

参与人数 1鱼币 +3 收起 理由
KeyError + 3 鱼C有你更精彩T_T

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表