a mod b


Liefert den Modulo von a und b. Das entspricht dem Restwert bei Division von a durch b.

Parameterbeschreibung


Parameter

Beschreibung

a

Zahlenwert.

b

Modulus.

Anmerkungen zu Datentypen


Ergebnis-Datentyp

Der Ergebnis-Datentyp der Funktion hängt vom Datentyp des Parameters a ab. Parameter b und folglich das Ergebnis werden immer implizit auf den Typ des Parameters a umgewandelt. Es gibt drei Möglichkeiten:

  • Wenn Parameter a vom Typ BigInteger ist, wird Parameter b in BigInteger umgewandelt und das Ergebnis ist BigInteger.

  • Wenn Parameter a vom Type BigDecimal ist, wird Parameter b in BigDecimal umgewandelt und das Ergebnis ist BigDecimal.

  • Wenn Parameter a weder vom Typ BigInteger noch vom Typ BigDecimal ist, wird er immer in Double umgewandelt. Parameter b wird ebenfalls in Double umgewandelt und das Ergebnis ist Double.

Weitere Hinweise zu Datentypen

  • Den Datentyp Double sollte man mit Vorsicht genießen, da es hier zu unschönen Nachkommaeffekten kommen kann. Siehe Beispiele unten. Das ist kein Programmierfehler, sondern liegt an generellen Darstellungsproblemen bei Binärzahlen, auf die an dieser Stelle aber nicht tiefer eingegangen werden soll.

  • Zusätzlich zur impliziten Typumwandlung innerhalb der Funktion gilt es auch die implizite Typumwandlung in Feldern der Zielstruktur zu beachtet (das gilt für Parameterfelder der Funktion und auch für das Ergebnisfeld). Hat ein Zielstruktur-Feld z. B. den Datentyp Integer und bekommt den Feldwert 7.2, dann wird der Feldwert implizit in 7 umgewandelt.

  • Zur expliziten Umwandlung von Datentypen können die Funktionen convert-type( value a, type b, mask c ) und convert2BigInt(a[, b]) verwendet werden.

Beispiele

Parameter a

Parameter b

Ergebnis

Erklärung

10 (Typ: BigInteger)

2 (Typ: BigInteger)

0 (Typ: BigInteger)

10 = 5 * 2, Rest 0.

10 (Typ: BigInteger)

4 (Typ: BigInteger)

2 (Typ: BigInteger)

10 = 2 * 4, Rest 2.

7.2 (Typ: BigDecimal)

2.1 (Typ: BigDecimal)

0.9 (Typ: BigDecimal)

7.2 = 3 * 2.1, Rest 0.9.

7.2 (Typ: Double)

2.1 (Typ: Double)

0.8999999999999999 (Typ: Double)

Hier kommt es im Ergebnis zu einem Darstellungsproblem im Datentyp Double.

7 (Typ: String)

2 (Typ: String)

1.0 (Typ: Double)

Der Datentyp von Parameter a wird implizit umgewandelt von String in Double. Das selbe gilt für Parameter b. Deshalb ist dann auch das Ergebnis vom Typ Double.

7 (Typ: BigInteger)

2.1 (Typ: Double)

1 (Typ: BigInteger)

Der Datentyp von Parameter b wird implizit umgewandelt von Double in BigInteger. Deshalb ist dann auch das Ergebnis vom Typ BigInteger. 7 = 3 * 2, Rest 1.

10 (Typ: Integer)

4 (Typ: Integer)

2.0 (Typ: Double)

Da Parameter a weder vom Typ BigInteger, noch vom Typ Big Decimal ist, wird er in Double umgewandelt und auch Parameter b. Folglich ist auch das Ergebnis vom Typ Double.