2016-09-29 2 views
1

CSV 파일을 쓰려고하는데, 6.49483e-005 값을 가지고 있습니다. 이것은 CSV로 정확하게 쓰여졌지만 Excel에서는 올바르게 표시되지 않습니다. . 6,48E + 00으로 읽습니다.엑셀과 C++를 사용하여 지수를 CSV로 변환

저는 C++에서 그렇게하고 있습니다. 원하는 경우 코드를 요청할 수 있습니다. CSV에 쓰여진 값에 긴 double을 사용하고 문자열로 변환 한 다음 작성합니다.

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

CVS에서 Excel에서 6.49483e-005

입니다 : @ThomasMatthews 지적

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 자리 정밀도로 형식을 과학으로 변경하십시오. 그것이 그 일을하는지보십시오. – cxw

+0

여전히 6,494830E + 00으로 읽혀집니다. CSV에서는 6.49483e-005로 표시됩니다. –

+0

OK - 오해의 소지가 있습니다. 추가로 입력 된 '서명되지 않은 n'값, 해당'sum' 및'os.str()'값, CSV 파일의 바이트 및 CSV를 열 때 Excel이 보여주는 내용의 스크린 샷을 편집하십시오. (추신 : 자신의'double's은 꽤 하드 코어입니다.) 감사합니다! – cxw

답변

1

으로, 로케일은 숫자 구분 기호로 .을 사용하지 않습니다. 따라서 Excel에서 예상하는 방식으로 숫자의 서식을 지정해야합니다. 또한 CSV 파일의 쉼표는 큰 따옴표로 묶어야합니다. 숫자를 "6,49483e-005"으로 포맷 한 다음 CSV로 출력하면 OK입니다!