python - 使用 2 位数字与 3 位数字时,django 中的数学结果不正确?

标签 python django

编辑:问题是 float 学(有关信息,请参阅此处: http://floating-point-gui.de/ )。将公式更改为:

(votes_yes + votes_no) * .55 

至:

(votes_yes + votes_no) * (55/100)
<小时/>

Django 1.3.7、Python 2.7

在我的模型中,我正在执行一些简单的数学运算,以便在通过管理界面提交时自动填充结果字段。我的问题是这不能正常工作,希望有人能解释为什么会这样。

它应该如何工作:如果有 55% 或更多的赞成票,那么结果应该发布为“已批准”,如果没有,则为“失败”。问题是对于 2 位数字,结果显然不正确。

例如:如果我输入 550 votes_yes 和 450 votes_no,结果将如您所期望的那样正确发布为“已批准”。但是,如果我输入 55 票赞成和 45 票反对,结果将发布为“失败”,即使公式 (votes_yes + votes_no) * .55 恰好等于 55 并且结果应获得批准。

看来,如果我使用 3 位数字,结果会很好,但两位数字必须大于 55%,而不是大于或等于。例如:56 票赞成,45 票则正常。 任何关于为什么会发生这种情况的帮助将不胜感激。

这是我的模型的编辑版本:

MAJORITY_REQUIREMENT = (
...
    ('2', '55%'),
...
)

POSSIBLE_RESULTS = (
    ('1', 'Approved'),
    ('2', 'Failed'),
)

class Measures(models.Model):
    votes_yes = models.IntegerField(blank=False)
    votes_no = models.IntegerField(blank=False)
    result = models.CharField(editable=False, max_length=30, choices=POSSIBLE_RESULTS)
    required_majority = models.CharField(max_length=1, blank=False, choices=MAJORITY_REQUIREMENT, default="1"

# do the math to get the result
    def save(self):
 ...
        if self.required_majority == '2':
            if self.votes_yes >= (self.votes_yes + self.votes_no) * .55:
                self.result = '1'
            else:
                self.result = '2'
...


    def __unicode__(self):
        return self.measure_name

最佳答案

这是由于 float 学造成的。与您的预期相反,执行 (45+55)*.55 实际上等于 55.00000000000001。您应该对公式执行以下操作:

if self.votes_yes >= math.floor((self.votes_yes + self.votes_no) * .55):

关于python - 使用 2 位数字与 3 位数字时,django 中的数学结果不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34139606/

相关文章:

python - pyttsx3 模块未显示所有已安装的声音

Python Gmail API : Email is not sending as the specified from

python - 如何在 Django 中设置 id 标签等于 URL 名称

python - django 不提供静态文件

python - Django 模板过滤器查询集

python - 为什么 PyPy 没有包含在标准 Python 中?

python - 正则表达式匹配 Python 函数调用

mysql - Django 查询集复杂查找

django - 在 Django 中,如何覆盖 'Save and continue' 功能?

python - 无法在 Elastic Beanstalk 上部署 Django 应用程序