Division ( / ) falsch berechnet in PostgreSQL
Sie stoßen auf ein Divisionsproblem in PostgreSQL, bei dem eine Ganzzahldivision zu einer ungenauen Antwort führt. Lassen Sie uns in den Hintergrund eintauchen und eine Lösung bereitstellen, die das Problem angeht.
Grundlegendes zur Ganzzahldivision
Die Ganzzahldivision, gekennzeichnet durch „/“, schneidet den Quotienten in Richtung Null ab. Das bedeutet, dass bei der Division zweier Ganzzahlen das Ergebnis auf die nächste ganze Zahl abgerundet wird.
Im gegebenen Beispiel sind „dev_cost“ und „sell_cost“ beide ganze Zahlen. Daher gibt die Abfrage „select dev_cost / sale_cost“ 2 zurück, was dem ganzzahligen Äquivalent von 16000 dividiert durch 7500 entspricht. Sie benötigen jedoch die Menge an Software, um die dev_cost wiederherzustellen, die 3 beträgt.
Lösung des Berechnungsproblems
Um den genauen Wert zu erhalten, müssen wir sicherstellen, dass mindestens ein Operand in die Division ist ein Gleitkomma- oder Dezimalwert. Dies verhindert das Abschneiden und führt zu einem gebrochenen Quotienten.
Eine Lösung besteht darin, eine der Spalten mit dem „CAST“-Operator in eine Dezimalzahl umzuwandeln:
select cast(dev_cost as decimal) / sell_cost from software ;
Eine andere Alternative ist die Verwendung von „::decimal“-Syntax zum Umwandeln der dev_cost-Spalte:
select dev_cost::decimal / sell_cost from software ;
Beide dieser Ansätze geben einen Gleitkommawert zurück Ergebnis, das die genaue Menge der benötigten Software darstellt.
Aufrunden auf die nächste ganze Zahl
Wenn Sie das Ergebnis auf die nächste ganze Zahl runden möchten, die die Mindestmenge darstellt Wenn Sie Software benötigen, um die dev_cost wiederherzustellen, können Sie die Funktion „CEIL“ verwenden:
select ceil(dev_cost::decimal / sell_cost) from software ;
Dadurch wird das Dezimalergebnis auf die nächste ganze Zahl aufgerundet Anzahl, um sicherzustellen, dass genügend Software verkauft wird, um die Entwicklungskosten zu decken.
Das obige ist der detaillierte Inhalt vonWie kann ich das Ergebnis der Ganzzahldivision in PostgreSQL korrekt berechnen, um eine Kürzung zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!