首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我乘2个浮子,结果就会不同,那么两个小数的乘法会不会不同?

如果我乘2个浮子,结果就会不同,那么两个小数的乘法会不会不同?
EN

Stack Overflow用户
提问于 2016-07-16 01:16:44
回答 2查看 126关注 0票数 2

我正在计算视图文件中的一个字段

代码语言:javascript
运行
复制
data_dict = { 'quantity_order': float(bom.quantity) * float(quantity)}

我添加了浮点转换,因为我遇到了另一个问题:

“不能用‘Decimal’型非整数乘序列‘”

在模型中,这两个字段都定义为十进制。

代码语言:javascript
运行
复制
quantity_order = models.DecimalField(max_digits=19, decimal_places=3)

其中一个字段通过url正则表达式接收。

代码语言:javascript
运行
复制
 url(r'^production/order/new/(?P<pk_bom>\d+)/(?P<pk_soproduct>\d+)/(?P<uri>\S+)/(?P<quantity>\d+(\.\d{1,3}))/$',views.Production_order_new, name="production_order_new"),

所以问题是有时候计算是不正确的。例如,如果两个数量值都是44,则计算正确,但当一个值为44 * 666时,结果将是443556.000

在乘法导致此错误之前,可以是要浮动的转换值吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-16 14:58:47

“不能用‘Decimal’型非整数乘序列‘”

这实际上意味着,一个操作数是序列,另一个操作数是十进制。Ie,bom.quantityquantity之一是序列,而不是整数、浮点数或十进制。

代码语言:javascript
运行
复制
data_dict = { 'quantity_order': float(bom.quantity) * float(quantity)}

一个序列可以用一个int来表示。

代码语言:javascript
运行
复制
seq = [1,2,3]
seq * 2 # produces  [1,2,3,1,2,3]

代码语言:javascript
运行
复制
seq * 2.5 # produces can't multiply sequence by non-int of type 'float'
票数 1
EN

Stack Overflow用户

发布于 2016-07-16 03:02:55

你为什么要把它转换成浮子?十进制就够了。结果仍然是一样的,即使你不转换它。

如果您确实出于某种原因想要转换它,那么请使用以下方法:

代码语言:javascript
运行
复制
data_dict = { 'quantity_order': float(bom.quantity * quantity)}

但这不会改变小数位数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38406833

复制
相关文章

相似问题

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