⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eicfftoa.c

📁 guide and some example with visualC++
💻 C
字号:
/* eicfftoa.c * *	(C) Copyright Dec 29 1995, Edmond J. Breen. *		   ALL RIGHTS RESERVED. * This code may be copied for personal, non-profit use only. * *//*#define DBL_MIN_EXP -100 */#include <math.h>#include <limits.h>#include <float.h>#include "stdliblocal.h"char *fftoa(double d, char *str, int p, char type, int trunc){    /*     * Convert a floating-point number into a     * formatted 'f','e' or 'E' type string.     * (c) Edmond J.Breen, March 1995.     * where:  'p'  represents the precision     *                i.e. the number of digits     *                that will be placed after     *                the decimal point.     *                A precision of 0 suppresses     *                the decimal point.     *         'type' is either 'f', 'e' or 'E'.     *                'f' ->  [-]mmm.dddd     *                'e' ->  [-]m.dddde+xx     *                      | [-]m.dddde-xx     *                'E' ->  [-]m.ddddE+xx     *                      | [-]m.ddddE-xx     *         'trunc' if trunc != 0 then trailing     *                 zeros will be removed.     *                 i.e. 'g' or 'G' format.     */    double M;    int i, j, width, spt, dec, prec;    static char *s;    prec = p;    i = 0;    if (d < 0)	str[0] = '-', s = &str[1], d = -d;    else	s = str;    if (d >= 1) {		/* collect integer part */	int k, c;	double D = floor(d);	d -= D;	do {	    j = fmod(D,10.0);	    s[i++] = j + '0';	    D -= j;	} while ((D /= 10) >= 1);	/* now reverse the string */	for (k = i, j = 0, k--; j < k; j++, k--) {	    c = s[j];	    s[j] = s[k];	    s[k] = c;	}    }    dec = i;    if (!dec) {			/* check for numbers less than 1 */	if (type != 'f') {	/* assume 'e' or 'E' format */	    if (d != 0) {	/* d == d might be a safety check? */		while ((d *= 10) < 1 && dec > DBL_MIN_EXP)		    --dec;		--dec;	    }	    if (d >= 1)		prec++, d /= 10;	} else	    s[i++] = '0';    }    if (dec < 0)	width = prec;    else if (type == 'f')	width = prec + (dec > 0 ? dec : 1);    else	width = prec + 1;    M = DBL_EPSILON/(FLT_RADIX*2.0); /* precision value */    while(1) {	/* now collect fraction */	d *= 10;	j = (int) d;	d -= j;	M *=10;	if((i < width) && (d >= M && d <= (1-M)))	    s[i++] = (char) j + '0';	else	    break;    }     if(d>=0.5)	j++;    s[i++] = (char) j + '0';    while(i<=width)	s[i++] = '0';        /* Have to round see ANSI176,13.9.5.2 */    if (!strround(s, width + 1)) /* watch for over flow */	s[0] = '1', width++, dec++;    if (p != 0) {		/* add in decimal point */	if (type == 'f') {	    if (dec > 0)		spt = dec;	    else		spt = 1;	} else	    spt = 1;	for (i = width; i > spt; i--)	    s[i] = s[i - 1];	s[spt] = '.';    } else	width--;    if (trunc) {		/* remove trailing zeros */	while (width && s[width] == '0')	    width--;	if (s[width] == '.')	    width--;    }    if (type != 'f') {		/* add in exponent */	s[++width] = type;	if (dec >= 0) {	    s[++width] = '+';	    if (dec != 0)		dec = dec - 1;	    if (dec < 10)		s[++width] = '0';	} else if (dec < 0) {	    s[++width] = '-';	    if (dec > -10)		s[++width] = '0';	    dec = -dec;	}	itoa(dec, &s[++width], 10);    } else	s[width + 1] = 0;    return str;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -