PDA

View Full Version : Dezimalstellen abschneiden



loeweadolf
10-07-04, 18:13
hallo,

folgende Merkwürdigkeit:

D refe1 ...... s ... 20 8
D bigewi .... s ...... 5 2
D grammh .. s ...... 4 0
D biistbrt ... s ...... 3 0
D bibrut ..... s ...... 6 2


eval(h) ref1 = (bigewi * 1000 - grammh) / (biistbrt / 100) / bibrut;

Bei der Umwandlung wird als Fehlermeldung gebracht:
*RNF7551 10 Ergebnis der numerischen Operation wird auf 0 Dezimalstellen abgeschnitten

Das verstehe ich nicht, das Ergebisfeld ist doch groß genug !?

mfg. Ludger

BenderD
10-07-04, 18:23
Hallo Ludger,

die Zuweisung hat die niedrigste Priorität, das heißt es wird zuerst der Ausdruck der rechten Seite berechnet und dabei werden Zwischenvariablen angelegt, die der Compiler nach einem Regelwerk (für das ich mich nicht interessieren möchte!!!) angelegt. Du hast zwei Möglichkeiten: Du kannst Dich mit dem Regelwerk befassen, und wenn Du es noch komplizierter haben willst mit irgendwelchen Modifiern dieses auch noch verändern, oder Du legst die Zwischenvariablen selber an und rechnest in Einzelschritten, dann wird so gerundet, wie Du es hinschreibst.

mfg

Dieter Bender


hallo,

folgende Merkwürdigkeit:

D refe1 ...... s ... 20 8
D bigewi .... s ...... 5 2
D grammh .. s ...... 4 0
D biistbrt ... s ...... 3 0
D bibrut ..... s ...... 6 2


eval(h) ref1 = (bigewi * 1000 - grammh) / (biistbrt / 100) / bibrut;

Bei der Umwandlung wird als Fehlermeldung gebracht:
*RNF7551 10 Ergebnis der numerischen Operation wird auf 0 Dezimalstellen abgeschnitten

Das verstehe ich nicht, das Ergebisfeld ist doch groß genug !?

mfg. Ludger

loeweadolf
10-07-04, 18:30
Hallo Dieter, vielen Dank für die samstagabendliche schnelle Antwort.

Ich hatte gehofft, mit EVAL die Einzelschritte
(so wie früher üblich) mir ersparen zu können.

Es sieht leider nicht so aus.

mfg. Ludger

Fuerchau
11-07-04, 09:41
Das Thema ist hier schon behandelt:
http://www.rlpforen.de/showthread.php?t=5009

Nimm einfach "eval(r)", das funktioniert meistens.

loeweadolf
11-07-04, 17:13
Hallo Baldur,

danke für den Hinweis auf den Link.

Ich werde es mal probieren mit eval(rh)

mfg. Ludger

Fuerchau
12-07-04, 09:29
eval(h) ist uninteressant (h=halfadjust) betrifft nur geradzahlige Stellenanzahl, eval(r) (r=round) reicht da aus.

PS:
Konstanten kann man auch mit Nachkomma definieren z.B. "100,000" !