2016-09-29 10 views
1

J'essaye d'écrire un fichier CSV, et j'ai une valeur qui est 6.49483e-005, qui est écrite correctement dans le CSV, mais elle ne s'affiche pas correctement dans Excel . il se lit comme 6,48E + 00. Je le fais en C++, si vous le souhaitez, vous pouvez demander du code, j'utilise long double pour la valeur qui est écrite dans le fichier CSV, puis je le convertis en chaîne, puis je l'écris.Convertir des exposants en CSV en utilisant Excel et C++

s = "00043E61" 
digitstring = "00000000000001000011111001100001" 
sum = 6.4753228798508644e-005 
n = 278113 

dans CVS, il est 6.49483e-005

excel:

enter image description here

  stringstream ss; 
      ss << hex << s; 
      unsigned n; 
      ss >> n; 
      bitset<32> b(n); 
      string digitstring = b.to_string(); 

      if(digitstring[0] == '1') 
      { 
       negative = true; 

      } 
      long double sum = 0; 
      int exp = 1; 
      int v = 0; 
      if(negative) 
      { 
       v = 1; 
      } 
      else 
      { 
       v = 0; 
      } 
      for(; v < digitstring.size(); v++) 
      { 
      int b = digitstring[v] - '0'; 
      long double result = (long double)b/power(2,exp); 
      sum+=result; 
      exp = exp +1; 


      } 
      if(negative) 
      { 
       sum*=-1; 
      } 
      ostringstream os; 
      os << sum; 
      resultsSoil.push_back(os.str()); 
     } 
+2

Oui, toujours code s'il vous plaît! :) --- Mais si c'est écrit correctement dans le fichier CSV, c'est probablement le format d'affichage de la cellule. Dans Excel, appuyez sur Ctl + 1 et remplacez Format par Scientifique avec 6 chiffres de précision. Voir si ça le fait. – cxw

+0

il est toujours lu comme 6,494830E + 00. Toutefois, dans CSV, il est écrit 6.49483e-005 –

+0

OK - Je peux être malentendu. Veuillez également modifier votre question pour afficher la valeur d'entrée 'unsigned n', les valeurs correspondantes' sum' et 'os.str()', les octets du fichier CSV et une capture d'écran de ce que Excel affiche lorsque vous ouvrez le fichier CSV. (PS construire votre propre «double» est assez difficile :).) Merci! – cxw

Répondre

1

Comme @ThomasMatthews a souligné, vos paramètres régionaux ne pas utiliser . comme séparateur de chiffres. Par conséquent, vous devez formater vos numéros comme Excel les attend. De plus, les virgules dans un fichier CSV doivent être placées entre guillemets. Formatez vos numéros comme "6,49483e-005" avant de les sortir au format CSV et vous devriez être OK!