首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点数和decimal.Decimal计算

浮点数和decimal.Decimal计算
EN

Stack Overflow用户
提问于 2017-02-07 04:15:41
回答 2查看 2.2K关注 0票数 0

我是python的新手,我正在将程序从VBA Excel重写到Python。

我需要精确的计算,但找不到合适的方法。

示例:

代码语言:javascript
复制
aa = 0.000016

bb = 0.000016

cc = aa*bb      # which gives 2.5599999999999996e-12

a = decimal.Decimal('0.0000016') 

b = decimal.Decimal('0.0000016')

c = a*b         # which gives 2.56E-12

但当我这么做的时候:

代码语言:javascript
复制
ccc= aa*b 

它给了我一个错误

我需要一种方法来对所有小数(‘’)数字执行数学运算,或者使浮点数更精确(不需要额外的十进制数(0.0016而不是0.0015999996))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-09 03:29:58

您正在尝试将float乘以抛出TypeError的decimal.Decimal。为了将它们相乘,您必须强制转换它们中的一个,以便它们是相同的类型,并且python可以确定结果应该是哪种类型。

代码语言:javascript
复制
>>> import decimal
>>> d = decimal.Decimal("0.000016")  # d is a Decimal
>>> f = 0.000016                     # f is a float
>>> d*f                              # can't do this!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'Decimal' and 'float'
>>> float(d) * f                     # cast d to a float, get a float result
2.56e-10
>>> d * decimal.Decimal(f)           # cast f to Decimal, get a Decimal result
Decimal('2.559999999999999884155166274E-10')

希望这能有所帮助!:)

票数 3
EN

Stack Overflow用户

发布于 2021-11-05 13:22:50

will的回答很精确,我也有同样的问题,解决方案是:将两个值都转换为浮点型和乘法:

代码语言:javascript
复制
result = float(value1) * float(value2)

然后再次将结果转换为小数,并使用round对小数位数进行舍入:

代码语言:javascript
复制
import decimal

final_result = round(decimal.Decimal(result), 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42076496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档