| <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> |
| |