2016-09-29 12 views
1

CSVファイルを書き込もうとしていて、値が6.49483e-005でCSVで正しく書かれていますが、Excelでは正しく表示されません。 6,48E + 00と読みます。エクセルおよびC++を使用して指数をCSVに変換する

私はC++でこれをやっていますが、必要ならコードを尋ねることができます。私はCSVに書き込まれた値にlong doubleを使って文字列に変換して書きます。 CVSで

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

それはExcelで6.49483e-005

です:

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

はい、常にコードしてください! :) ---しかし、CSVで正しく書かれていれば、おそらくセルの表示形式です。 ExcelではCtl + 1を押し、6桁の精度でFormat to Scientificを変更します。それがそれをするかどうかを確認してください。 – cxw

+0

それでも6,494830E + 00と読み込まれます。 CSVでは6.49483e-005と表示されています。 –

+0

OK - 私は誤解の可能性があります。さらに、入力した 'unsigned n'値、対応する' sum'と 'os.str()'の値、CSVファイルのバイト数、およびCSVを開いたときのExcelのスクリーンショットを表示するために質問を編集してください。 (PSはあなた自身の 'double'sを構築するのはかなりハードコアです:))ありがとう! – cxw

答えて

1

@ThomasMatthewsが指摘したように、あなたのロケールが桁区切りとして.を使用していません。したがって、Excelが期待している方法で数値を書式設定する必要があります。さらに、CSVファイルのコンマは二重引用符で囲む必要があります。 CSVに出力する前に番号を"6,49483e-005"と書いてください。そうすればOKです!

関連する問題