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

📄 gconvert.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#if !defined(lint) && defined(SCCSIDS)static char     sccsid[] = "@(#)gconvert.c 1.1 92/07/30 SMI";#endif/* * Copyright (c) 1988 by Sun Microsystems, Inc. *//* * gcvt  - Floating output conversion to minimal length string */#include "base_conversion.h"#ifndef PRE41#include <locale.h>#endifvoid_gcvt(ndigit, pd, trailing, buf)	int             ndigit;	decimal_record *pd;	char           *buf;{	char           *p, *pstring;	int             i;	static char     *inf8 = "Infinity";	static char     *inf3 = "Inf";	static char     *nan = "NaN";#ifdef PRE41	char decpt = '.';#else	char decpt = *(localeconv()->decimal_point);#endif	p = buf;	if (pd->sign)		*(p++) = '-';	switch (pd->fpclass) {	case fp_zero:		*(p++) = '0';		if (trailing != 0) {			*(p++) = decpt;			for (i = 0; i < ndigit - 1; i++)				*(p++) = '0';		}		break;	case fp_infinity:		if (ndigit < 8)			pstring = inf3;		else			pstring = inf8;		goto copystring;	case fp_quiet:	case fp_signaling:		pstring = nan;copystring:		for (i = 0; *pstring != 0;)			*(p++) = *(pstring++);		break;	default:		if ((pd->exponent > 0) || (pd->exponent < -(ndigit + 3))) {	/* E format. */			char            estring[4];			int             n;			i = 0;			*(p++) = pd->ds[0];			*(p++) = decpt;			for (i = 1; pd->ds[i] != 0;)				*(p++) = pd->ds[i++];			if (trailing == 0) {	/* Remove trailing zeros and . */				p--;				while (*p == '0')					p--;				if (*p != decpt)					p++;			}			*(p++) = 'e';			n = pd->exponent + i - 1;			if (n >= 0)				*(p++) = '+';			else {				*(p++) = '-';				n = -n;			}			_fourdigitsquick((short unsigned) n, estring);			for (i = 0; estring[i] == '0'; i++);	/* Find end of zeros. */			if (i > 2)				i = 2;	/* Guarantee two zeros. */			for (; i <= 3;)				*(p++) = estring[i++];	/* Copy exp digits. */		} else {	/* F format. */			if (pd->exponent >= (1 - ndigit)) {	/* x.xxx */				for (i = 0; i < (ndigit + pd->exponent);)					*(p++) = pd->ds[i++];				*(p++) = decpt;				if (pd->ds[i] != 0) {	/* More follows point. */					for (; i < ndigit;)						*(p++) = pd->ds[i++];				}			} else {/* 0.00xxxx */				*(p++) = '0';				*(p++) = decpt;				for (i = 0; i < -(pd->exponent + ndigit); i++)					*(p++) = '0';				for (i = 0; pd->ds[i] != 0;)					*(p++) = pd->ds[i++];			}			if (trailing == 0) {	/* Remove trailing zeros and point. */				p--;				while (*p == '0')					p--;				if (*p != decpt)					p++;			}		}	}	*(p++) = 0;}char           *gconvert(number, ndigit, trailing, buf)	double          number;	int             ndigit, trailing;	char           *buf;{	decimal_mode    dm;	decimal_record  dr;	fp_exception_field_type fef;	dm.rd = fp_direction;	dm.df = floating_form;	dm.ndigits = ndigit;	double_to_decimal(&number, &dm, &dr, &fef);	_gcvt(ndigit, &dr, trailing, buf);	return (buf);}char           *gcvt(number, ndigit, buf)	double          number;	int             ndigit;	char           *buf;{	return (gconvert(number, ndigit, 0, buf));}

⌨️ 快捷键说明

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