# PR_dtoa

Converts a floating point number to a string.

## Syntax

```{code}
#include <prdtoa.h>

PRStatus PR_dtoa(
   PRFloat64 d,
   PRIntn mode,
   PRIntn ndigits,
   PRIntn *decpt,
   PRIntn *sign,
   char **rve,
   char *buf,
   PRSize bufsz);
```

### Parameters

The function has these parameters:

`d`

: The floating point number to be converted to a string.

`mode`

: The type of conversion to employ.

`ndigits`

: The number of digits desired in the output string.

`decpt`

: A pointer to a memory location where the runtime will store the
  offset, relative to the beginning of the output string, of the
  conversion's decimal point.

`sign`

: A location where the runtime can store an indication that the
  conversion was of a negative value.

`*rve`

: If not `NULL` this location is set to the address of the end of the
  result.

`buf`

: The address of the buffer in which to store the result.

`bufsz`

: The size of the buffer provided to hold the result.

### Results

The principle output is the null-terminated string stored in `buf`. If
`rve` is not `NULL`, `*rve` is set to point to the end of the
returned value.

## Description

This function converts the specified floating point number to a string,
using the method specified by `mode`. Possible modes are:

`0`

: Shortest string that yields `d` when read in and rounded to
  nearest.

`1`

: Like 0, but with Steele & White stopping rule. For example, with IEEE
  754 arithmetic, mode 0 gives 1e23 whereas mode 1 gives
  9.999999999999999e22.

`2`

: `max(1, ndigits)` significant digits. This gives a return value
  similar to that of `ecvt`, except that trailing zeros are
  suppressed.

`3`

: Through `ndigits` past the decimal point. This gives a return value
  similar to that from `fcvt`, except that trailing zeros are
  suppressed, and `ndigits` can be negative.

`4,5,8,9`

: Same as modes 2 and 3, but using*left to right* digit generation.

`6-9`

: Same as modes 2 and 3, but do not try fast floating-point estimate
  (if applicable).

`all others`

: Treated as mode 2.

Upon return, the buffer specified by `buf` and `bufsz` contains the
converted string. Trailing zeros are suppressed. Sufficient space is
allocated to the return value to hold the suppressed trailing zeros.

If the input parameter `d` is*+Infinity*,*-Infinity* or*NAN*,
`*decpt` is set to 9999.
