| <html lang="en"> | 
 | <head> | 
 | <title>System V Number Conversion - The GNU C Library</title> | 
 | <meta http-equiv="Content-Type" content="text/html"> | 
 | <meta name="description" content="The GNU C Library"> | 
 | <meta name="generator" content="makeinfo 4.13"> | 
 | <link title="Top" rel="start" href="index.html#Top"> | 
 | <link rel="up" href="Arithmetic.html#Arithmetic" title="Arithmetic"> | 
 | <link rel="prev" href="Parsing-of-Numbers.html#Parsing-of-Numbers" title="Parsing of Numbers"> | 
 | <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> | 
 | <!-- | 
 | This file documents the GNU C library. | 
 |  | 
 | This is Edition 0.12, last updated 2007-10-27, | 
 | of `The GNU C Library Reference Manual', for version | 
 | 2.8 (Sourcery G++ Lite 2011.03-41). | 
 |  | 
 | Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, | 
 | 2003, 2007, 2008, 2010 Free Software Foundation, Inc. | 
 |  | 
 | Permission is granted to copy, distribute and/or modify this document | 
 | under the terms of the GNU Free Documentation License, Version 1.3 or | 
 | any later version published by the Free Software Foundation; with the | 
 | Invariant Sections being ``Free Software Needs Free Documentation'' | 
 | and ``GNU Lesser General Public License'', the Front-Cover texts being | 
 | ``A GNU Manual'', and with the Back-Cover Texts as in (a) below.  A | 
 | copy of the license is included in the section entitled "GNU Free | 
 | Documentation License". | 
 |  | 
 | (a) The FSF's Back-Cover Text is: ``You have the freedom to | 
 | copy and modify this GNU manual.  Buying copies from the FSF | 
 | supports it in developing GNU and promoting software freedom.''--> | 
 | <meta http-equiv="Content-Style-Type" content="text/css"> | 
 | <style type="text/css"><!-- | 
 |   pre.display { font-family:inherit } | 
 |   pre.format  { font-family:inherit } | 
 |   pre.smalldisplay { font-family:inherit; font-size:smaller } | 
 |   pre.smallformat  { font-family:inherit; font-size:smaller } | 
 |   pre.smallexample { font-size:smaller } | 
 |   pre.smalllisp    { font-size:smaller } | 
 |   span.sc    { font-variant:small-caps } | 
 |   span.roman { font-family:serif; font-weight:normal; }  | 
 |   span.sansserif { font-family:sans-serif; font-weight:normal; }  | 
 | --></style> | 
 | <link rel="stylesheet" type="text/css" href="../cs.css"> | 
 | </head> | 
 | <body> | 
 | <div class="node"> | 
 | <a name="System-V-Number-Conversion"></a> | 
 | <p> | 
 | Previous: <a rel="previous" accesskey="p" href="Parsing-of-Numbers.html#Parsing-of-Numbers">Parsing of Numbers</a>, | 
 | Up: <a rel="up" accesskey="u" href="Arithmetic.html#Arithmetic">Arithmetic</a> | 
 | <hr> | 
 | </div> | 
 |  | 
 | <h3 class="section">20.12 Old-fashioned System V number-to-string functions</h3> | 
 |  | 
 | <p>The old System V<!-- /@w --> C library provided three functions to convert | 
 | numbers to strings, with unusual and hard-to-use semantics.  The GNU C | 
 | library also provides these functions and some natural extensions. | 
 |  | 
 |    <p>These functions are only available in glibc and on systems descended | 
 | from AT&T Unix.  Therefore, unless these functions do precisely what you | 
 | need, it is better to use <code>sprintf</code>, which is standard. | 
 |  | 
 |    <p>All these functions are defined in <samp><span class="file">stdlib.h</span></samp>. | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- SVID, Unix98 --> | 
 | <div class="defun"> | 
 | — Function: char * <b>ecvt</b> (<var>double value, int ndigit, int *decpt, int *neg</var>)<var><a name="index-ecvt-2577"></a></var><br> | 
 | <blockquote><p>The function <code>ecvt</code> converts the floating-point number <var>value</var> | 
 | to a string with at most <var>ndigit</var> decimal digits.  The | 
 | returned string contains no decimal point or sign. The first digit of | 
 | the string is non-zero (unless <var>value</var> is actually zero) and the | 
 | last digit is rounded to nearest.  <code>*</code><var>decpt</var> is set to the | 
 | index in the string of the first digit after the decimal point.  | 
 | <code>*</code><var>neg</var> is set to a nonzero value if <var>value</var> is negative, | 
 | zero otherwise. | 
 |  | 
 |         <p>If <var>ndigit</var> decimal digits would exceed the precision of a | 
 | <code>double</code> it is reduced to a system-specific value. | 
 |  | 
 |         <p>The returned string is statically allocated and overwritten by each call | 
 | to <code>ecvt</code>. | 
 |  | 
 |         <p>If <var>value</var> is zero, it is implementation defined whether | 
 | <code>*</code><var>decpt</var> is <code>0</code> or <code>1</code>. | 
 |  | 
 |         <p>For example: <code>ecvt (12.3, 5, &d, &n)</code> returns <code>"12300"</code> | 
 | and sets <var>d</var> to <code>2</code> and <var>n</var> to <code>0</code>.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- SVID, Unix98 --> | 
 | <div class="defun"> | 
 | — Function: char * <b>fcvt</b> (<var>double value, int ndigit, int *decpt, int *neg</var>)<var><a name="index-fcvt-2578"></a></var><br> | 
 | <blockquote><p>The function <code>fcvt</code> is like <code>ecvt</code>, but <var>ndigit</var> specifies | 
 | the number of digits after the decimal point.  If <var>ndigit</var> is less | 
 | than zero, <var>value</var> is rounded to the <var>ndigit</var>+1'th place to the | 
 | left of the decimal point.  For example, if <var>ndigit</var> is <code>-1</code>, | 
 | <var>value</var> will be rounded to the nearest 10.  If <var>ndigit</var> is | 
 | negative and larger than the number of digits to the left of the decimal | 
 | point in <var>value</var>, <var>value</var> will be rounded to one significant digit. | 
 |  | 
 |         <p>If <var>ndigit</var> decimal digits would exceed the precision of a | 
 | <code>double</code> it is reduced to a system-specific value. | 
 |  | 
 |         <p>The returned string is statically allocated and overwritten by each call | 
 | to <code>fcvt</code>.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- SVID, Unix98 --> | 
 | <div class="defun"> | 
 | — Function: char * <b>gcvt</b> (<var>double value, int ndigit, char *buf</var>)<var><a name="index-gcvt-2579"></a></var><br> | 
 | <blockquote><p><code>gcvt</code> is functionally equivalent to ‘<samp><span class="samp">sprintf(buf, "%*g", | 
 | ndigit, value</span></samp>’.  It is provided only for compatibility's sake.  It | 
 | returns <var>buf</var>. | 
 |  | 
 |         <p>If <var>ndigit</var> decimal digits would exceed the precision of a | 
 | <code>double</code> it is reduced to a system-specific value.  | 
 | </p></blockquote></div> | 
 |  | 
 |    <p>As extensions, the GNU C library provides versions of these three | 
 | functions that take <code>long double</code> arguments. | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- GNU --> | 
 | <div class="defun"> | 
 | — Function: char * <b>qecvt</b> (<var>long double value, int ndigit, int *decpt, int *neg</var>)<var><a name="index-qecvt-2580"></a></var><br> | 
 | <blockquote><p>This function is equivalent to <code>ecvt</code> except that it takes a | 
 | <code>long double</code> for the first parameter and that <var>ndigit</var> is | 
 | restricted by the precision of a <code>long double</code>.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- GNU --> | 
 | <div class="defun"> | 
 | — Function: char * <b>qfcvt</b> (<var>long double value, int ndigit, int *decpt, int *neg</var>)<var><a name="index-qfcvt-2581"></a></var><br> | 
 | <blockquote><p>This function is equivalent to <code>fcvt</code> except that it | 
 | takes a <code>long double</code> for the first parameter and that <var>ndigit</var> is | 
 | restricted by the precision of a <code>long double</code>.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- GNU --> | 
 | <div class="defun"> | 
 | — Function: char * <b>qgcvt</b> (<var>long double value, int ndigit, char *buf</var>)<var><a name="index-qgcvt-2582"></a></var><br> | 
 | <blockquote><p>This function is equivalent to <code>gcvt</code> except that it takes a | 
 | <code>long double</code> for the first parameter and that <var>ndigit</var> is | 
 | restricted by the precision of a <code>long double</code>.  | 
 | </p></blockquote></div> | 
 |  | 
 |    <p><a name="index-gcvt_005fr-2583"></a>The <code>ecvt</code> and <code>fcvt</code> functions, and their <code>long double</code> | 
 | equivalents, all return a string located in a static buffer which is | 
 | overwritten by the next call to the function.  The GNU C library | 
 | provides another set of extended functions which write the converted | 
 | string into a user-supplied buffer.  These have the conventional | 
 | <code>_r</code> suffix. | 
 |  | 
 |    <p><code>gcvt_r</code> is not necessary, because <code>gcvt</code> already uses a | 
 | user-supplied buffer. | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- GNU --> | 
 | <div class="defun"> | 
 | — Function: int <b>ecvt_r</b> (<var>double value, int ndigit, int *decpt, int *neg, char *buf, size_t len</var>)<var><a name="index-ecvt_005fr-2584"></a></var><br> | 
 | <blockquote><p>The <code>ecvt_r</code> function is the same as <code>ecvt</code>, except | 
 | that it places its result into the user-specified buffer pointed to by | 
 | <var>buf</var>, with length <var>len</var>.  The return value is <code>-1</code> in | 
 | case of an error and zero otherwise. | 
 |  | 
 |         <p>This function is a GNU extension.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- SVID, Unix98 --> | 
 | <div class="defun"> | 
 | — Function: int <b>fcvt_r</b> (<var>double value, int ndigit, int *decpt, int *neg, char *buf, size_t len</var>)<var><a name="index-fcvt_005fr-2585"></a></var><br> | 
 | <blockquote><p>The <code>fcvt_r</code> function is the same as <code>fcvt</code>, except that it | 
 | places its result into the user-specified buffer pointed to by | 
 | <var>buf</var>, with length <var>len</var>.  The return value is <code>-1</code> in | 
 | case of an error and zero otherwise. | 
 |  | 
 |         <p>This function is a GNU extension.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- GNU --> | 
 | <div class="defun"> | 
 | — Function: int <b>qecvt_r</b> (<var>long double value, int ndigit, int *decpt, int *neg, char *buf, size_t len</var>)<var><a name="index-qecvt_005fr-2586"></a></var><br> | 
 | <blockquote><p>The <code>qecvt_r</code> function is the same as <code>qecvt</code>, except | 
 | that it places its result into the user-specified buffer pointed to by | 
 | <var>buf</var>, with length <var>len</var>.  The return value is <code>-1</code> in | 
 | case of an error and zero otherwise. | 
 |  | 
 |         <p>This function is a GNU extension.  | 
 | </p></blockquote></div> | 
 |  | 
 | <!-- stdlib.h --> | 
 | <!-- GNU --> | 
 | <div class="defun"> | 
 | — Function: int <b>qfcvt_r</b> (<var>long double value, int ndigit, int *decpt, int *neg, char *buf, size_t len</var>)<var><a name="index-qfcvt_005fr-2587"></a></var><br> | 
 | <blockquote><p>The <code>qfcvt_r</code> function is the same as <code>qfcvt</code>, except | 
 | that it places its result into the user-specified buffer pointed to by | 
 | <var>buf</var>, with length <var>len</var>.  The return value is <code>-1</code> in | 
 | case of an error and zero otherwise. | 
 |  | 
 |         <p>This function is a GNU extension.  | 
 | </p></blockquote></div> | 
 |  | 
 |    </body></html> | 
 |  |