Heim >Datenbank >MySQL-Tutorial >Warum gibt die PostgreSQL-Ganzzahldivision falsche Ergebnisse zurück?
Divisionsproblem in PostgreSQL: Warum Division (/) falsche Ergebnisse zurückgibt
Beim Versuch, Divisionen mit ganzzahligen Spalten in PostgreSQL zu berechnen, kann es vorkommen, dass Benutzer auf unerwartete Ergebnisse stoßen. Stellen Sie sich das folgende Szenario vor:
Problem:
Eine Tabelle mit dem Namen „software“ enthält die Spalten „dev_cost“ und „sell_cost“. Sie möchten die Menge an Software ermitteln, die verkauft werden muss, um die dev_cost zu decken. Vorausgesetzt, dass „dev_cost“ 16.000 und „sell_cost“ 7.500 beträgt, erwarten Sie ein Ergebnis von 3. Die Abfrage
select dev_cost / sell_cost from software;
gibt jedoch stattdessen 2 zurück.
Ursache:
PostgresSQL führt eine Ganzzahldivision durch, die das Ergebnis in Richtung kürzt null. Da sowohl „dev_cost“ als auch „sell_cost“ als Ganzzahlen definiert sind, wird das Ergebnis auf 2 gekürzt.
Lösung:
Um das richtige Ergebnis zu erhalten, mindestens eine Der Operand muss in einen Gleitkommatyp umgewandelt werden, z. B. Float oder Decimal. Dies kann mit der Funktion cast() oder dem Operator mit Doppelpunkt :: erreicht werden:
select cast(dev_cost as decimal) / sell_cost from software;
oder
select dev_cost::decimal / sell_cost from software;
Alternativ können Sie das Ergebnis mit auf die nächste ganze Zahl aufrunden die Funktion ceil():
select ceil(dev_cost::decimal / sell_cost) from software;
Demo:
[SQLFiddle Demo](https://www.sqlfiddle.com/#!17/23da8/1)
Das obige ist der detaillierte Inhalt vonWarum gibt die PostgreSQL-Ganzzahldivision falsche Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!