Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Symptomen
Dit probleem kan optreden wanneer u de volgende reeks acties uitvoert:
Stel deze kenmerken in voor een productieconfiguratiemodel:
- Invoer (geheel getal)
- Percentage (decimaal)
- Resultaat (geheel getal)
Maak een berekening met de volgende expressie:
Resultaatinvoer = × percentage ÷ 100
In dit geval wordt het resultaat van het gehele getal niet altijd correct afgerond. Als de invoer bijvoorbeeld 1000 is en het percentage 2,40 is, verwacht u dat het gehele getal 24 is omdat 2,40 procent van 1.000 24 is (of 24,00 in decimale vorm). In plaats daarvan wordt het resultaat weergegeven als 23. Wanneer het percentage echter 2,39 is, wordt de berekening afgerond op 24 in plaats van 23. Wanneer het percentage 2,50 is, wordt de berekening afgerond op 25, zoals verwacht.
Oorzaak
Dit probleem treedt op vanwege de manier waarop Microsoft Solver Foundation intern getallen vertegenwoordigt met behulp van breuken. In het voorgaande voorbeeld wordt het resultaat van de berekening waarin het percentage 2,40 is weergegeven als 27021597764222975 ÷ 1125899906842624 = 23,99999999999999911821580299874767610946652734375. Wanneer .NET deze waarde als geheel getal cast, wordt 23 geretourneerd.
Oplossing
Dit gedrag wordt niet gewijzigd omdat andere scenario's hiervan afhankelijk zijn. In het voorgaande voorbeeld kunt u het probleem oplossen door een extra decimaal kenmerk en berekeningen te introduceren.
Stel bijvoorbeeld de volgende kenmerken in voor een productieconfiguratiemodel:
- Invoer (geheel getal)
- Percentage (decimaal)
- ResultDecimal (decimaal)
- ResultInteger (geheel getal)
Vervolgens kunt u de volgende berekeningen toevoegen:
- ResultDecimale = invoer × percentage ÷ 100
- ResultInteger = ResultDecimal