あなたの解決策を待っている間、私は次のアイデアを思いつきました:
float または double を char の配列に出力するには、sprintf() を使用します。これを解析して指数と仮数を取得します。コードは次のようになります。
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 によるよりシンプルなソリューションを好みます :)
ご協力ありがとうございました!
アレックス