尝试根据表中的值计算Python sqlite3中的百分比

问题描述 投票:0回答:1

我试图根据两个因素创建一个百分比(对于一个硬币计数程序),我必须创建一个人们计算硬币数量的准确度。这是通过计算他们计算的硬币包的总数以及他们已经正确计算的行李总数来计算的,占其总数的百分比。

在我的程序中,如果志愿者为该特定硬币输入硬币袋的正确重量,则将+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个回答
0
投票

我不确定我是否准确理解了您的要求,但有两件事我认为更新查询不正确。

  1. 您正在尝试更新列并使用相同的列计算同一SQL语句中另一列的值。这是不正确的。在您的第一个更新声明中,例如你通过bags_correct增加total_bags1,然后做一个percentage = (bags_correct / total_bags) * 100。您的行李将在此处正确更新,但您的百分比将根据行李的先前值计算,因为在您提交交易之前更新实际上不适用于数据库。你应该做percentage = (bags_correct + 1/ total_bags + 1) * 100
  2. 第二个问题是bag的所有列都是整数,而你想进行浮点除法。您计算的百分比是进行整数除法,因此每当bags_correct小于total_bags时,您的除法自动计算为0.您需要做的是需要将列转换为浮点数(或者至少是分子符号会自动强制浮动分区)。像percentage = (CAST(bags_correct AS FLOAT) / CAST(total_bags AS FLOAT)) * 100之类的东西。如果要将百分比存储为INT,可以根据需要将结果转换回整数。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.