Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Problembeschreibung
Dieses Problem kann auftreten, wenn Sie die folgende Reihe von Aktionen ausführen:
Richten Sie diese Attribute für ein Produktionskonfigurationsmodell ein:
- Eingabe (ganze Zahl)
- Prozent (Dezimalzahl)
- Ergebnis (ganze Zahl)
Erstellen Sie eine Berechnung mit dem folgenden Ausdruck:
Ergebniseingabe = × Prozent ÷ 100
In diesem Fall wird das ganzzahlige Ergebnis nicht immer richtig gerundet. Wenn die Eingabe beispielsweise 1.000 ist und der Prozentsatz 2,40 ist, erwarten Sie, dass das ganzzahlige Ergebnis 24 ist, da 2,40 Prozent von 1.000 24 (oder 24,00 in Dezimalform) betragen. Stattdessen wird das Ergebnis als 23 angezeigt. Wenn der Prozentsatz jedoch 2,39 beträgt, wird die Berechnung auf 24 statt auf 23 gerundet. Wenn der Prozentsatz 2,50 ist, wird die Berechnung wie erwartet auf 25 gerundet.
Ursache
Dieses Problem tritt auf, da Microsoft Solver Foundation intern Zahlen mithilfe von Bruchzahlen darstellt. Im vorherigen Beispiel wird das Ergebnis der Berechnung, bei der der Prozentsatz 2,40 ist, als 27021597764222975 ÷ 1125899906842624 = 23,9999999999999999999991118215802998747676610946652734375 dargestellt. Wenn .NET diesen Wert als ganze Zahl umgibt, wird 23 zurückgegeben.
Lösung
Dieses Verhalten wird nicht geändert, da andere Szenarien davon abhängen. Im vorherigen Beispiel können Sie das Problem beheben, indem Sie ein zusätzliches Dezimal-Attribut und berechnungen einführen.
Richten Sie beispielsweise die folgenden Attribute für ein Produktionskonfigurationsmodell ein:
- Eingabe (ganze Zahl)
- Prozent (Dezimalzahl)
- ResultDecimal (Dezimalzahl)
- ResultInteger (ganze Zahl)
Anschließend können Sie die folgenden Berechnungen hinzufügen:
- ResultDecimal = Input × Percent ÷ 100
- ResultInteger = ResultDecimal