Sammanfattning
Felaktigt resultat returneras när du använder operatorn modulus i.NET Framework 3.5 och.NET Framework 4.0. Särskilt det här problemet uppstår när du kör resten åtgärden och när du använder vissa 64-bitars heltalsvärden under x86 arkitektur.
Följande exempelkod visar problemet:
class Program {
static void Main(string[] args)
{
DoModulo();
}
public static void DoModulo()
{
const int LNXBASE = 100;
long longX = -856480339907;
var mod = longX % LNXBASE;
Console.WriteLine(mod);
}
}
Utdata är här 93 i stället för rätt resultat av-7.
Mer Information
Problemet har utlösts av operationen resten och endast för 64-bitars heltal under x86 arkitektur. Det här problemet påverkar inte andra åtgärder och fastställts för.NET Framework 4.5 under alla arkitekturer.
Temporär lösning
Eftersom problemet har åtgärdats i.NET Framework 4.5, rekommenderar vi att du uppgraderar om det är möjligt. Om en uppgradering inte är möjligt, använder du någon av följande lösningar:
-
Istället för att använda const intAnvänd int.
-
Använd statiska int.
Observera följande korrigerade kod:
class Program {
static void Main(string[] args)
{
DoModulo();
}
static int LNXBASE = 100;
public static void DoModulo()
{
long longX = -856480339907;
var mod = longX % LNXBASE;
Console.WriteLine(mod);
}
}