Resten åtgärden returnerar felaktiga resultat i.NET Framework 3.5 och 4.0

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);
}
}

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×