【问题标题】:Trying to Calculate a percentage in Python sqlite3 based on values in a table尝试根据表中的值计算 Python sqlite3 中的百分比
【发布时间】:2019-02-18 16:33:53
【问题描述】:

我正在尝试根据两个因素(对于硬币计数程序)创建一个百分比,我必须在其中创建人们计数硬币的准确度。这是通过获取他们计算的硬币袋总数以及他们正确计算的袋子总数占总数的百分比来计算的。

在我的程序中,如果志愿者为该特定硬币输入正确的硬币袋重量,+1 将添加到 bags_correct 列和 total_bags 列。如果权重错误,+1 将添加到 bags_incorrect 列以及 total_bags 列。

然后我会使用这个c.execute("UPDATE volunteers SET bags_correct = bags_correct + 1, total_bags = total_bags + 1, total_bags_value = total_bags_value + (?), percentage = (bags_correct / total_bags)*100 WHERE name = (?)", (100, name)) 来尝试计算一个百分比(准确度),但我得到了奇怪的值,例如“0”或“400”,它需要是一个百分比,即 0% 到 100%,但我这样做有困难。

我尝试将real 更改为integer,但发生了同样的事情

我算错了吗?

conn = sqlite3.connect("volunteers.db")

c = conn.cursor()


c.execute("""CREATE TABLE volunteers (
           name text,
           bags_correct integer,
           bags_incorrect integer,
           total_bags integer,
           total_bags_value integer,
           percentage real
           )""")





####This is when NEW volunteers add their first bag of coins when they counted it CORRECTLY without weight error.

c.execute("INSERT INTO volunteers VALUES (?, ?, ?, ?, ?, ?)", (name, 1, 0, 
1, 100, 100))
conn.commit()


HOWEVER



####This is when NEW volunteers add their first bag of coins BUT it is INCORRECT

c.execute("INSERT INTO volunteers VALUES (?, ?, ?, ?, ?, ?)", (name, 0, 1, 
1, 100, 0))
conn.commit()



####This is when NON-NEW volunteers add their bag of coins if it's CORRECT, hence the UPDATE.

c.execute("UPDATE volunteers SET bags_correct = bags_correct + 1, total_bags = total_bags + 1, total_bags_value = total_bags_value + (?), percentage = (bags_correct / total_bags)*100 WHERE name = (?)", (100, name))
conn.commit()



####This is when NON-NEW volunteers add their bag of coins but it's INCORRECT.

c.execute("UPDATE volunteers SET bags_incorrect = bags_incorrect + 1, total_bags = total_bags + 1, total_bags_value = total_bags_value + (?), percentage = (bags_correct / total_bags)*100 WHERE name = (?)", (100, name))
conn.commit()

注意:total_bag_value 以便士为单位。

【问题讨论】:

    标签: python math sqlite sql-update percentage


    【解决方案1】:

    我不确定我是否准确理解了您的要求,但我发现更新查询有两点不正确。

    1. 您正在尝试更新一列并使用同一列计算同一 SQL 语句中另一列的值。这是不正确的。在您的第一个更新声明中,例如您将bags_correcttotal_bags 增加1,然后执行percentage = (bags_correct / total_bags) * 100。您的包将在此处正确更新,但您的百分比将根据包的先前值计算,因为在您提交事务之前,更新实际上不适用于数据库。你应该改用percentage = (bags_correct + 1/ total_bags + 1) * 100

    2. 第二个问题是袋子的所有列都是整数,而您想要进行浮点除法。您正在计算的百分比是整数除法,因此每当bags_correct 小于total_bags 时,您的除法会自动计算为 0。您需要做的是您需要将列转换为浮点数(或至少是会自动强制进行浮点除法的分子)。像percentage = (CAST(bags_correct AS FLOAT) / CAST(total_bags AS FLOAT)) * 100 这样的东西。如果要将百分比存储为INT,可以根据需要将结果转换回整数。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2019-05-09
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      相关资源
      最近更新 更多