【问题标题】:0.01 differecene in django calculationsdjango 计算中的 0.01 差异
【发布时间】:2019-03-08 11:34:35
【问题描述】:

下面描述的问题发生在带有 Django 1.9.4 的 Python3 上

在我的 Django 项目中,为了计算 sale_amount 的折扣,我使用下面的代码行

discount = round((sale_amount - tax_amount ) * discount_rate,2)

以上变量的取值如下

sale_amount,tax_amount, discount_rate = 30.00, 6.75, 0.02000000

从 Django 模型对象中获取的变量值都是相同类型的,即十进制.十进制

根据上述代码行计算的 Django 项目文件中的折扣为0.46

当我使用上述金额和公式计算折扣时,我在 Django 控制台中得到value: 0.47

我无法弄清楚为什么 Django 控制台和项目计算之间存在 0.01 差异。

【问题讨论】:

  • 你确定吗? python函数中的round(),无论Django版本如何,我在python3中得到0.47
  • 是的,我敢肯定,我得到的结果与你在 python 控制台和 Django 控制台中得到的结果相同(正确的值,即 0.47),但我得到了错误的值(0.46) Django 网络应用程序。
  • 如果有模板,请与模板共享代码库

标签: python python-3.x rounding django-1.9


【解决方案1】:

(30 - 6.75) * 0.02 的结果是 0.465。所以我们希望在四舍五入时得到 0.47。但这里似乎有一个解释:round() documentation.

对于浮点数的 round() 行为可能令人惊讶:例如,round(2.675, 2) 给出 2.67 而不是预期的 2.68。这不是错误:这是因为大多数小数部分不能完全表示为浮点数。有关详细信息,请参阅浮点运算:问题和限制。

【讨论】:

  • 感谢您的回答,您能否为我的问题提出解决方案。
  • 对不起,我以为您只是在寻找关于为什么会发生这种情况的解释。在我在回答中链接的文档中,他们建议使用decimal module。我不能告诉你更多;你的问题引起了我的兴趣,但我没有真正的 Python 或 Django 知识。
猜你喜欢
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多