2017-05-16 2 views
0

je le code suivant:Xamarin GOR UWP Mode de déclenchement à double variable ne sera pas mis à zéro

public static MapSpan GetMapspan(List<Position> pobj_Positions, bool pb_IncludeCurrentLocation) 
    { 

     bool gotRect = false; 
     double ld_north = 0; 
     double ld_west = 0; 
     double ld_south = 0; 
     double ld_east = 0; 
     double ld_workLatitude = 0; 
     double ld_workLongitude = 0; 
     double ld_centerLatitude = 0; 
     double ld_centerLongitude = 0; 
     Position lobj_CenterPosition; 
     MapSpan lobj_MapSpan = null; 

     try 
     { 

      ld_north = 0; 
      ld_west = 0; 
      ld_south = 0; 
      ld_east = 0; 
      ld_workLatitude = 0; 
      ld_workLongitude = 0; 
      ld_centerLatitude = 0; 
      ld_centerLongitude = 0; 

      if (pobj_Positions.Count > 0) 

Donc, mon défi est que dans le mode de libération pour mon Xamarin Forms application UWP, quand je suis à l'instruction if vu ci-dessous, ld_north et ld_east ne sont pas réellement zéro comme ils devraient l'être. Vous pouvez voir leurs valeurs réelles ci-dessous de la fenêtre de ma montre:

ld_north 6.237901216026427E-299 double 
ld_west  0.0     double 
ld_south 0.0     double 
ld_east  7.8983449250911225E-299 double 

Toute idée comment résoudre ce problème et ou pourquoi cela se produit?

Répondre

0

Je n'ai pas vu un 0 avoir ce problème auparavant, mais pour les autres nombres un double ne stocke pas sa valeur exactement, il peut y avoir des erreurs d'arrondi. Comme vous pouvez le voir, il a E-299, ce qui signifie que c'est une valeur incroyablement petite.

Si vous avez besoin de précision, passez à un nombre décimal.

Alternativement, si vous continuez à utiliser en double, vous pouvez vérifier si son zéro en faisant

if (value < 0.00001 && value > -0.00001) 

Et commencer à vérifier les choses par un supérieur ou inférieur, au lieu d'un absolu, pour tenir compte de ces questions.

L'autre problème, c'est que la fenêtre de surveillance a un problème, même si elle est en fait nulle, c'est difficile à dire, mais cela pourrait certainement être un bug dans le système. Comme je l'ai mentionné, je n'ai pas vu de problème avec un 0 auparavant.