草庐IT

Python,如何扩展 Decimal 类以添加有用的方法

我想扩展Decimal类以向其添加一些有用的方法,特别是用于处理货币。我这样做的时候遇到的问题:fromdecimalimportDecimalclassNewDecimal(Decimal):defnew_str(self):return"${}".format(self)d1=NewDecimal(1)printd1.new_str()#prints'$1'd2=NewDecimal(2)d3=NewDecimal(3)d5=d2+d3printd5.new_str()#exceptionhappenshere它抛出一个异常:AttributeError:'Decimal'obje

python - 为什么 Python 的 Decimal 函数默认为 54 位?

输入后fromdecimalimport*getcontext().prec=6Decimal(1)/Decimal(7)我得到了值(value)Decimal('0.142857')但是如果我输入Decimal(1.0/7)我会得到Decimal('0.142857142857142849212692681248881854116916656494140625') 最佳答案 1.0/7计算一个二进制float到17位精度。这发生在Decimal构造函数看到它之前:>>>d=1.0/7>>>type(d)>>>d.as_intege

python - decimal.Decimal(n) % 1 返回 InvalidOperation, DivisionImpossible for all n >= 100

我在Django应用程序中使用Decimal对象,发现了这个奇怪的错误:ipdb>decimal.Decimal(10)%1Decimal('0')ipdb>decimal.Decimal(100)%1***decimal.InvalidOperation:[]ipdb>decimal.Decimal(150)%1***decimal.InvalidOperation:[]ipdb>decimal.Decimal(79)%1Decimal('0')ipdb>decimal.Decimal(100.1)%2Decimal('0.10')ipdb>decimal.Decimal(1000)

Python 3.x 无法将 Decimal() 序列化为 JSON

我之前问过这个问题,它被标记为重复this,但接受的答案不起作用,甚至pylint显示代码中存在错误。我想做的事情:fromdecimalimportDecimalimportjsonthang={'Items':[{'contact_id':Decimal('2'),'street_name':'Asdasd'},{'contact_id':Decimal('1'),'name':'Lukas','customer_id':Decimal('1')}],'Count':2}print(json.dumps(thang))抛出:TypeError:'Decimal'类型的对象不是JSO

python - 对 python 负 decimal.Decimal 和正 int 进行模运算

使用简单的int:>>>-45%360315然而,使用decimal.Decimal:>>>fromdecimalimportDecimal>>>Decimal('-45')%360Decimal('-45')我希望得到Decimal('315')。这有什么原因吗?有没有办法获得一致的行为(无需修补decimal.Decimal)?(我没有更改上下文,也找不到如何更改它来解决这种情况)。 最佳答案 经过长时间的搜索(因为搜索“%”、“mod”、“modulo”等给出了一千个结果),我终于意外地发现,thisisintended:Th

Python:为什么数学模块中的函数接受 Decimal 对象作为参数?

奇怪的是,Python的数学模块中的每个函数似乎都适用于Decimal对象。例如:frexp、exp、cos。当我键入print(math.frexp(decimal.Decimal('2341.12412')))时,Python打印出正确答案,即(0.57156...,12),并且不会抛出任何异常。我假设数学模块将用低级C编写,尽可能依赖硬件数学运算来提高效率。那么...为什么它适用于Decimal对象?他们是否对数学函数进行了类型检查,并在参数为Decimal时切换到不同的实现?我没有看到文档中提到的任何内容。也可能是小数自动转换为float,但这也没有任何意义。是的,我很困惑。

python - 将非常小的 python Decimal 转换为非科学记数法字符串

我正在使用PythonDecimal类进行精确的浮点运算。我需要将结果编号一致地转换为标准符号编号作为字符串。但是,默认情况下,非常小的十进制数以科学记数法呈现。>>>fromdecimalimportDecimal>>>>>>d=Decimal("0.000001")>>>dDecimal('0.000001')>>>str(d)'0.000001'>>>d=Decimal("0.000000001")>>>dDecimal('1E-9')>>>str(d)'1E-9'如何让str(d)返回'0.000000001'? 最佳答案

python - Django——删除模板中 Decimal 的尾随零

有没有办法从django模板中的Decimal字段中删除尾随零?这是我拥有的:0.0002559000,这是我需要的:0.0002559。有答案建议使用floatformat过滤器来做到这一点:{{balance.bitcoins|floatformat:3}}但是,floatformat执行四舍五入(向下或向上),这在我的情况下是不需要的,因为我只需要删除尾随零而不进行任何四舍五入。 最佳答案 解决方案是使用normalize()方法:{{balance.bitcoins.normalize}}

python - Python Decimal 对象中 NaN 后数字的含义

我在decimal.Decimal的文档中阅读了有效十进制字符串语法的词法定义。以下内容让我感到有些奇怪:nan::='NaN'[digits]|'sNaN'[digits]这对我来说真的很奇怪,但显然可以在“NaN”之后包含数字而没有任何问题,但是“NaN”之后除数字之外的任何字符都会引发InvalidOperation。>>>Decimal('NaN10')Decimal('NaN10')所以我有几个问题:NaN中的数字是什么意思?带有数字的NaN实例的行为与“普通”NaN有何不同?除了以这种方式初始化之外,还有其他方法可以获取带数字的NaN吗?除了Decimal类之外,Pytho

python - 在 python 中获取 Decimal 的 Ceil()?

有没有办法在python中获取高精度Decimal的ceil?>>>importdecimal;>>>decimal.Decimal(800000000000000000001)/100000000000000000000Decimal('8.00000000000000000001')>>>math.ceil(decimal.Decimal(800000000000000000001)/100000000000000000000)8.0数学舍入值并返回非精确值 最佳答案 获取Decimal实例x上限的最直接方法是使用x.to_in