안녕하세요이 표시됩니다 있도록 플로트 번호를 포맷 할 :형식 부동 소수점 수
decimal.fraction을
경우 소수점 = 최대 11 자리와 비율 = 최대 9 자리
분수 부분이 없으면 분수가 표시되지 않아야하며 십진수 부분에 11 자리 이상이면 과학적 형식으로 표시됩니다.
아무도 도와 줄 수 있습니까?
안녕하세요이 표시됩니다 있도록 플로트 번호를 포맷 할 :형식 부동 소수점 수
decimal.fraction을
경우 소수점 = 최대 11 자리와 비율 = 최대 9 자리
분수 부분이 없으면 분수가 표시되지 않아야하며 십진수 부분에 11 자리 이상이면 과학적 형식으로 표시됩니다.
아무도 도와 줄 수 있습니까?
이렇게 내부 형식이 있다고 생각하지 않습니다. 직접 포맷해야합니다 (테스트하지 않음) :
void fprintf_float(FILE* f, double value) {
if (-1e11 < value && value < 1e11) {
double d = fabs(value);
const char* sign = d > 0 ? "" : "-";
double ipart, fpart;
char fpartstr[16];
int pos;
fpart = modf(d, &ipart);
snprintf(fpartstr, 16, "%.9f", fpart);
for (pos = 10 /*strlen(fpartstr)-1*/; pos > 0; -- pos)
if (fpartstr[pos] != '0' && fpartstr[pos] != '.')
break;
fpartstr[pos+1] = '\0';
fprintf(f, "%s%.11g%s", sign, ipart, fpartstr+1);
} else {
fprintf(f, "%.10e", value);
}
}
표준 라이브러리는 직접 사용할 수 없습니다. 특수 포맷팅이 필요한 경우 10 진수 포맷터를 제안하지만 값을 측정 한 다음 표준 라이브러리의 적절한 모드와 정밀도를 설정하여 수행 할 수도 있습니다.
이렇게하면?
#include <stdio.h>
#include <string.h>
#include <math.h>
void printnum(double num_in)
{
char buff[32];
char buff2[32];
if (num_in >= 10000000000.0)
{
sprintf (buff, "%e", num_in);
}
else
{
char *pt;
unsigned long long tmp;
tmp = floor (num_in);
sprintf (buff, "%llu", tmp);
num_in -= tmp;
if(num_in < 1.0e-11)
{
printf("%s\n",buff);
return;
}
sprintf (buff2, "%10.9lf", num_in);
pt = memchr (buff2, '.', 32);
strcat (buff, pt);
}
printf("%s\n",buff);
}
int main(void)
{
double t = 100.0;
int i;
for(i=0;i<11;i++)
{
printf("%lf\t",t);
printnum(t);
t *= 12.3456;
}
return 0;
}
스트림이 작업을 수행 할 수 있다고 생각합니다.
#include <locale>
#include <sstream>
std::wostringstream out;
out.imbue(std::locale::classic()); // Make sure a '.' is used as decimal point
out.precision(9); // set fraction to 9 digits
out << 1.2;
const std::wstring str = out.str();