BPM erst runden, dann ganzzahlig ausgeben

Hallo,

ich möchte gerne die BPM einheitlich als ganzzahligen Wert, also ohne Nachkomma formatieren - die vorhandenen Nachkomma sollten noch entsprechend gerundet werden. Siehe Beispiel:

vorher:
145.1
55
132.49
79.5
112.00

nachher:
145
55
132
80
112

Ich habe schon einige Posts gelesen, die jeweils einen Teil des Problemes lösen, aber ich kriege es nicht gebacken, alles zusammen zu bringen. Vor allem die Rundung bereitet mir Probleme :slight_smile:

Danke Euch schon mal für die Hilfe.

Thomas

Vollautomatisches Auf-, Abrunden in 3 Aktionen:

  1. Regulärer Ausdruck:

.[0-4][0-9]$

Treffer ersetzen durch:

nichts

  1. Regulärer Ausdruck

^([0-9][0-9]).[5-9][0-9]$

Treffer ersetzen durch:

$add($1,1)

  1. Regulärer Ausdruck

^([0-9][0-9][0-9]).[5-9][0-9]$

Treffer ersetzen durch:

$add($1,1)

Einfach mal testen, Garantie geb ich heute keine !

Gruss Dickie

Hallo Dickie,

danke für Deine Antwort. Zum Abrunden bin ich auch schon mit

$div(%BPM%,1)

gelangt. Aber warum sich mit weniger zufrieden geben :slight_smile: Vielleicht findet ja doch noch jemand eine Lösung für das Runden - ich probiere auch fleissig weiter.

Thomas

Vollautomatisches Auf-, Abrunden in 3 Aktionen:

  1. Regulärer Ausdruck:

.[0-4][0-9]$

Treffer ersetzen durch:

nichts

  1. Regulärer Ausdruck

^([0-9][0-9]).[5-9][0-9]$

Treffer ersetzen durch:

$add($1,1)

  1. Regulärer Ausdruck

^([0-9][0-9][0-9]).[5-9][0-9]$

Treffer ersetzen durch:

$add($1,1)

Einfach mal testen, Garantie geb ich heute keine !

Gruss Dickie

Da hättest du im Forum bestimmt eine brauchbare Lösung finden können.
Ich benutze die folgende Aktionengruppe, um Mixmeister BPM Werte zu speichern und gerundete BPM Werte anzuzeigen.

Anfang Aktionsgruppe Round BPM to integer

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld: BPM_MIXMEISTER
Formatstring: $if2(%BPM_MIXMEISTER%,%BPM%)

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld: BPM
Formatstring: $left($replace(%BPM%,'.',)'00',$add($len($div(%BPM%,1)),2))

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld: BPM
Formatstring: $ifgreater($mod(%BPM%,100),49,$add($div(%BPM%,100),1),$div(%BPM%,100))

Ende Aktionsgruppe Round BPM to integer (3 Aktionen)

DD.20080114.1843.CET
Edit. Irrtümliche 44 ausgetauscht mit 49.
DD.20120717.1537.CEST

Hallo Dickie,

Deine Lösung ist schon mal ein Teilerfolg. Nur die BPM mit einer Nachkommastelle bleiben unverändert, z.B. 148.2 bleibt 148.2 - alle anderen ändert er wie erwünscht.

Danke schon mal - ich versuche noch zu verstehen was Du da gemacht hast :slight_smile:.

  1. Regulärer Ausdruck:

.[0-4]$

Treffer ersetzen durch:

nichts

hinzufügen und testen !

Hallo Dickie,

hinzugefügt, getestet, funktioniert! Klasse... danke für Deine Hilfe.

Jetzt habe ich gleich zwei Lösungen für mein Problem - jetzt das Ganze noch verstehen, dann wär's perfekt. Ich versuch mich nochmal reinzudenken :slight_smile:.

Thomas

Hallo DetlevD,

danke für Deine Hilfe. Ich habe im Forum nach bpm* gesucht und u.a. auch einige Aktionen von Dir gefunden - darüber hinaus habe ich die 40 letzten Seiten im Forum DE/Support durchstöbert - leider ohne Erfolg.

Egal, Deine Lösung funktioniert jedenfalls prächtig. Ich habe allerdings die Aktion 1 weggelassen - nach Lesen der Funktionsbeschreibung von "$if2(x,y)" habe ich für meine Daten keinen Sinn darin gesehen (vielleicht hast Du noch eine kurze Erklärung dazu).

Allerbesten Dank für Deine Hilfe.

Thomas

Den BPM Wert lasse ich zunächst mit dem Programm Mixmeister ermitteln.
Mixmeister speichert den BPM Wert mit zwei Dezimalstellen im Tagfeld BPM.
Um diesen präzisen BPM Wert beim anschließenden Runden nicht zu verlieren, speichere ich den Wert in dem Tagfeld BPM_MIXMEISTER für spätere Verwendung, aber nur dann, wenn das Tagfeld BPM_MIXMEISTER leer ist.

DD.20080114.1919.CET

Super vielen Dank fuer die Hilfe DD! Eine Kleinigkeit, die ich persoenlich bevorzuge:
die 44 durch 49 ersetzen, damit 100.45-100.49 zu 100 wird und nicht zu 101 :

$ifgreater($mod(%BPM%,100),49,$add($div(%BPM%,100),1),$div(%BPM%,100))

Vielen Dank noch einmal,
Bjoern

Ich bin der Meinung, dass es nur mit dem Vergleich 'größer als 0.44' bzw. 'kleiner als oder gleich 0.44' eine korrekte Rundung ergibt, denn 100.45 muss gerundet 101 ergeben (schrittweises Aufrunden 100.45 ==> 100.5 ==> 101) und 100.44 muss 100 ergeben, oder etwa nicht?

DD.20080114.1931.CET

Hallo DD,

mit dem x.44 als Grenze könnte ich leben - verstehe aber nicht, warum 101.44 100 ergeben muss (oder ist's ein Tippfehler?).

Thomas

Es ist ein Tippfehler - schon korrigiert.

DD.20080114.2010.CET

Hallo Dickie,

beim weiteren Testen ist mir jetzt noch aufgefallen, dass ein BPM-Wert mit Format xxx.5 weiterhin nicht verändert wird (z.B. 65.5 -> 65.5).

Thomas

Vollautomatisches Auf-, Abrunden in 4 Aktionen:

  1. Regulärer Ausdruck:

.[0-4]$
Treffer ersetzen durch:
nichts

  1. Regulärer Ausdruck:

.[0-4][0-9]$
Treffer ersetzen durch:
nichts

  1. Regulärer Ausdruck:

^([0-9]{1,3}).[5-9]$
Treffer ersetzen durch:
$add($1,1)

  1. Regulärer Ausdruck:

^([0-9]{1,3}).[5-9][0-9]$
Treffer ersetzen durch:
$add($1,1)

Damit sollte es jetzt funktionieren !

Gruss Dickie

100.45 muss gerundet 101 ergeben (schrittweises Aufrunden 100.45 ==> 100.5 ==> 101)
und 100.44 muss 100 ergeben, oder etwa nicht?

nee doch! 100.499999999999999999999999999 gerundet auf ganze Zahl gibt 100!

"Ist die Ziffer an der ersten wegfallenden Dezimalstelle ... nicht größer als eine 4, wird abgerundet. Anderenfalls wird aufgerundet. Die folgenden Nachkommastellen werden nicht berücksichtigt. Diese Rundungsregel wird durch die Norm DIN 1333 beschrieben."
http://de.wikipedia.org/wiki/Rundung

:book: HDH, andreas

Das zugehörige Wikipedia Beispiel zeigt für die dritte Nachkommastelle:
'aus 13,3750... € wird 13,38 €'.
'5' ist nicht 'nicht größer als eine 4', also wird aufgerundet von '75' auf '80'.
Das ist kaufmännisches Runden und genauso habe ich es implementiert.

Aber:
Es gibt ein Verfahren, ..., die mathematisch unverzerrte Rundung (englisch round to even). Es rundet von der genauen Mitte zwischen zwei Ziffern immer zur nächsten geraden Zahl auf oder ab. Ansonsten entspricht es dem kaufmännischen Verfahren:
Beispiele.
2,15 --> 2,2
2,45 --> 2,4
2,5 --> 2
3,5 --> 4

Ist vielleicht das 'unverzerrte mathematische Runden' besser geeignet zur Rundung von BPM Werten?

DD.20080123.1833.CET

Nochmal:
'Ist die Ziffer an der ersten wegfallenden Dezimalstelle ... nicht größer als eine 4, wird abgerundet. Anderenfalls wird aufgerundet. Die folgenden Nachkommastellen werden nicht berücksichtigt.'

Runden auf ganze Zahl

123.01 ==> 123
123.49 ==> 123
123.50 ==> 124
123.99 ==> 124

Anfang Aktionengruppe BPM.Runden.NK0

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $replace(%BPM_MIXMEISTER%,'.',)

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $div(%BPM%,10)

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $ifgreater($mod(%BPM%,10),4,$add($div(%BPM%,10),1),$div(%BPM%,10))

Aktion #4
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $if($eql(%BPM%,'0'),,%BPM%)

Ende Aktionengruppe BPM.Runden.NK0 (4 Aktionen)

Runden auf eine Stelle nach dem Komma

123.01 ==> 123.0
123.44 ==> 123.4
123.45 ==> 123.5
123.99 ==> 124.0

Anfang Aktionengruppe BPM.Runden.NK1

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $replace(%BPM_MIXMEISTER%,'.',)

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $ifgreater($mod(%BPM%,10),4,$add($div(%BPM%,10),1),$div(%BPM%,10))

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $div(%BPM%,10)'.'$mod(%BPM%,10)

Aktion #4
Aktionstyp 5: Tagfeld formatieren
Feld _______: BPM
Formatstring: $if($eql(%BPM%,'0.0'),,%BPM%)

Ende Aktionengruppe BPM.Runden.NK1 (4 Aktionen)

DD.20111129.1348.CET
Edit.20120717.1525.CEST