솔루션을 기다리는 동안이 조각 : 배열 플로트 또는 더블을 인쇄 할
사용의 sprintf() char. 이것을 해석하여 지수와 가수를 얻습니다.
void printDoubleToChar(double d, char* c){
char valAsChar[256];
sprintf(valAsChar, "%.12e", d);
int expStart = 0, expWidth = 0;
for(int i=0; i<sizeof(valAsChar); i++){
if(valAsChar[i] == 'e'){
expStart = i+1;
break;
}
}
for(int i=expStart; i<sizeof(valAsChar); i++){
if(valAsChar[i] == '\0'){
expWidth = i - expStart;
break;
}
}
char chValExp[32];
memcpy(chValExp, &valAsChar[expStart], expWidth+1);
char chValMan[128];
memcpy(chValMan, valAsChar, expStart-1);
chValMan[expStart-1] = '\0';
sprintf(c, "%s*10^{%s}", chValMan, chValExp);
}
int main(){
double myNewDbl = 3.95743e-5;
char chDbl[256];
printDoubleToChar(myNewDbl, chDbl);
printf("\nchDbl: %s\n", chDbl); // output: chDbl: 3.957430000000*10^{-05}
}
을하지만 솔직히, 나는 dasblinkenlight :
는 당신의 도움에 대해 감사하여 훨씬 더 간단 솔루션을 선호 : 코드는 이제 다음과 같은 방법을 보인다! 알렉스
는 반올림 LOG10처럼 (어떻게 든) 당신에게 지수를 얻을 것 같다. 일단 당신이 그것을 가지고 가수를 얻을만큼 간단해야합니다. – Lalaland
@EthanSteinberg : 전체 정밀도를 원하는지 여부에 따라 간단하지 않습니다. –
"C/C++"와 같은 언어가 없으며 두 언어의 답변이 매우 다릅니다. –