修改python中预先存在的float类以包含自定义的round函数

修改python中预先存在的float类以包含自定义的round函数,python,python-3.x,class,floating-point,precision,Python,Python 3.x,Class,Floating Point,Precision,我是Python新手,浮点运算有问题。据我所知,Python中的浮点算法生成十进制值的二进制近似值,我们可以使用round()函数、字符串格式化方法或decimal.decimal类来处理浮点值 但是,所有这些都需要在计算过程中不断写入round()、decimal.decimal()或字符串格式方法。是否有方法修改特定程序中预先存在的float类,以便所有计算以及float值的存储都在舍入到某个小数位数后进行?或者,我们可以创建一个新类来实现这一点吗 我已经尝试了第二种方法,我的代码是:

我是Python新手,浮点运算有问题。据我所知,Python中的浮点算法生成十进制值的二进制近似值,我们可以使用round()函数、字符串格式化方法或decimal.decimal类来处理浮点值

但是,所有这些都需要在计算过程中不断写入round()、decimal.decimal()或字符串格式方法。是否有方法修改特定程序中预先存在的float类,以便所有计算以及float值的存储都在舍入到某个小数位数后进行?或者,我们可以创建一个新类来实现这一点吗

我已经尝试了第二种方法,我的代码是:

    class Float(float):
            def count_decimal_places(float_num):
                    if type(float_num) == int:
                            return 0
                    return len(str(float_num).split('.')[1])
            def __add__(self, other):
                    return round(self +other, max(count_decimal_places(self), count_decimal_places(other)))

这应该将3+-1.6返回为1.4,而不是1.399999998。但是,上述代码也不起作用。

这是否回答了您的问题?不,我理解为什么会发生这种情况的基本逻辑。我正在寻找一种方法,通过稍微修改现有的float数据类型或创建一个自定义的float数据类型来克服这个问题
1.0/3.0
的结果是什么?
(1.0/3.0)*3.0
的结果如何?我还没有在粘贴代码的自定义浮点类中定义重载乘法方法,但函数应该在乘法/除法时返回一个小数点后3位的四舍五入结果,因此每当对这些值执行乘法/除法运算时,结果会在自动取整后保存。老实说,如果你一直在取整,那么你就是做错了。问问自己,对于可以用十进制精确表示的值,二进制浮点的不精确性是否真的对您的工作很重要。(例如:如果你在做科学计算,很可能不会。如果你在做会计,这很可能很重要。)如果重要,使用
Decimal
贯穿全文:这就是它的目的。如果没有,请使用
float
并在计算中使用1/10亿数量级错误,必要时使用字符串格式进行精确输出。