Anmelden

View Full Version : SQL-Anforderung



Seiten : 1 [2]

Fuerchau
18-10-12, 14:35
Wieso 100%?

Z.B.:
A / Tot * 100 = 350 / 5800 * 100.00 = 6,0344 %

fpxx
18-10-12, 14:40
Man muss nur die Formel umdrehen:
Summe_A * 100.00 / Summe_TO

Fuerchau
18-10-12, 15:35
Das gilt ggf. nur dann, wenn eine Integerdivision stattfand (Feld Menge ohne Nachkomma).
Wenn du nur 100 statt 100.00 genommen hättest wäre das Ergebnis nämlich auch gleich.
Mathematisch betrachtet ist das vollkommen egal.

fpxx
18-10-12, 16:10
Mathematisch ist es klarerweise ident; tatsächlich erhalte ich bei diesem SQL-Statement unterschiedliche Ergebnisse:

Bei Summe_a*100 / Summe_tot erhalte ich die korrekten %

Bei Summe_a/Summe_tot * 100 (egal, ob 100 oder 100.00) bekomme ich als Ergebnis entweder den Wert 100 oder den Wert 0

B.Hauser
18-10-12, 16:35
Mathematisch ist es klarerweise ident; tatsächlich erhalte ich bei diesem SQL-Statement unterschiedliche Ergebnisse:

Bei Summe_a*100 / Summe_tot erhalte ich die korrekten %

Bei Summe_a/Summe_tot * 100 (egal, ob 100 oder 100.00) bekomme ich als Ergebnis entweder den Wert 100 oder den Wert 0

Das liegt daran, dass sowohl Summe_a als auch Summe_tot ganzzahlig (Integer) sind, oder als solche behandelt werden.

Das Ergebnis einer Berechnung mit reinen Integer-Variablen oder Werten (unabhängig davon ob Division oder nicht) ergibt wieder einen Integer-Wert, d.h. etwaige Nachkommastellen werden abgeschnitten. So sind nun mal die Regeln!

Summe_a * 100,00 ergibt keinen Integer-Wert, da 100 Dezimal-Positionen enthält und damit intern als Fließkomma interpretiert wird. Wenn dieses (interne Fließkomma-)Ergebnis dann durch einen Integer-Wert dividiert wird, ist das Ergebnis wiederum ein Fließkomma-Wert, d.h. Nachkommastellen werden berücksichtigt.

Langer Rede kurzer Sinn, Du musst entweder Summe_a (oder Summe_Tot) explizit auf Decimal casten, oder Du stellst 100,0 an die erste oder zweite Stelle in Deiner Berechnung.

Birgitta

Fuerchau
18-10-12, 16:58
Statt cast reicht dann auch (der kaum verständliche)

(a + 0.00) / b * 100.00 ;););)