Gibt es einen Algorithmus, der eine Zahl in drei Teile aufteilen kann und deren Summen mit der ursprünglichen Zahl übereinstimmen?

8

Zum Beispiel, wenn Sie das folgende Beispiel in Betracht ziehen.

%Vor%

Eine Möglichkeit, wie ich es sehen konnte, war, die ursprüngliche Zahl minus die ersten zwei Divisionen zu nehmen, und das Ergebnis wäre meine dritte Nummer. Wenn ich nun diese 3 Nummern nehme, bekomme ich meine Originalnummer.

%Vor%

Gibt es dafür eine Formel in Oracle PL / SQL oder eine Funktion oder etwas, das implementiert werden könnte?

Vielen Dank im Voraus!

    
user2025696 25.02.2014, 21:08
quelle

4 Antworten

6

Diese Version benötigt auch Präzision als Parameter:

%Vor%

Wenn Sie beispielsweise den Wert auf die Anzahl der Tage im aktuellen Monat aufteilen möchten, können Sie dies tun:

%Vor%

Um den Wert zwischen den einzelnen Monaten, gewichtet nach der Anzahl der Tage in jedem Monat, aufzuteilen, können Sie dies stattdessen tun (ändern Sie die level <= 3 , um die Anzahl der Monate zu ändern, für die sie berechnet wird):

%Vor%     
Jeffrey Kemp 26.02.2014, 00:21
quelle
3

Verwenden Sie rationale Zahlen . Sie könnten die Zahlen als Brüche und nicht als einfache Werte speichern. Nur so kann sichergestellt werden, dass die Menge tatsächlich in 3 geteilt ist und sich zur ursprünglichen Zahl addiert. Sicher kannst du mit Rundungen und Resten etwas hacky machen, solange es dir egal ist, dass die Portionen nicht genau in 3 geteilt sind.

Der "Algorithmus" ist einfach das

100/3 + 100/3 + 100/3 == 300/3 == 100

Speichern Sie sowohl den Zähler als auch den Nenner in separaten Feldern und fügen Sie dann die Zähler hinzu. Sie können immer in Gleitkommawerte konvertieren, wenn Sie die Werte anzeigen.

Die Oracle-Dokumentation hat sogar ein schönes Beispiel dafür Implementieren Sie es:

%Vor%     
nont 25.02.2014 21:25
quelle
1

Hier ist eine parametrisierte SQL-Version

%Vor%

Ausgabe:

%Vor%

Wenn Sie die Eingabeparameter (p_number und p_buckets) editieren, verteilt das SQL p_number im Wesentlichen gleichmäßig auf die Anzahl der angeforderten Buckets (p_buckets).

    
Brian Hart 25.02.2014 21:36
quelle
0

Ich habe dieses Problem gestern gelöst, indem ich 2 von 3 Teilen von der Startnummer subtrahiert habe, z. 100 - 33,33 - 33,33 = 33,34 und das Ergebnis der Zusammenfassung ist immer noch 100.

    
Leo Napoleon 25.02.2014 21:21
quelle

Tags und Links