NSPR Reference Previous Contents Next |
Chapter 17 Floating Point Number to String Conversion
These conversion functions were originally written by David M. Gay of AT&T. They use IEEE double-precision (not IEEE double-extended) arithmetic.
The header file prdtoa.h
declares these functions. The functions are:
PR_strtod
Converts the prefix of a decimal string to the nearest double-precision floating point number.Syntax
#include <prdtoa.h>
PRFloat64 PR_strtod(const char *s00, char **se);
Parameters
The function has the following parameters:
s00
|
The input string to be scanned.
|
se
|
A pointer that, if not NULL , will be assigned the address of the last
character scanned in the input string.
|
Returns
The result of the conversion is aPRFloat64
value equivalent to the input string. If
the parameter se
is not NULL
the location it references is also set.
Description
PR_strtod
converts the prefix of the input decimal string pointed to by s00
to a
nearest double-precision floating point number. Ties are broken by the IEEE
round-even rule. The string is scanned up to the first unrecognized character. If the
value of se
is not (char **) NULL
, PR_strtod
stores a pointer to the character
terminating the scan in *se
. If the answer would overflow, a properly signed
HUGE_VAL
(infinity) is returned. If the answer would underflow, a properly signed
0 is returned. In both cases, PR_GetError()
returns the error code
PR_RANGE_ERROR
. If no number can be formed, se
is set to s00
, and 0 is returned.
PR_dtoa
Converts a floating point number to a string.Syntax
#include <prdtoa.h>
PRStatus PR_dtoa(
PRFloat64 d,
PRIntn mode,
PRIntn ndigits,
PRIntn *decpt,
PRIntn *sign,
char **rve,
char *buf,
PRSize bufsz);
Parameters
This function takes the following parameters:
Results
The principle output is the null-terminated string stored inbuf
. 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 bymode
. Possible modes are:
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.
PR_cnvtf
Converts a floating point number to a string.Syntax
#include <prdtoa.h>
void PR_cnvtf (
char *buf,
PRIntn bufsz,
PRIntn prcsn,
PRFloat64 fval);
Parameters
This function takes the following parameters:
Description
PR_cnvtf
is a simpler interface to convert a floating point number to a string. It
conforms to the ECMA standard of Javascript (ECMAScript).
On return, the result is written to the buffer pointed to by buf
of size bufsz
.
References
Gay's implementation is inspired by these two papers.[1] William D. Clinger, "How to Read Floating Point Numbers Accurately," Proc. ACM SIGPLAN '90, pp. 92-101.
[2] Guy L. Steele, Jr. and Jon L. White, "How to Print Floating-Point Numbers Accurately," Proc. ACM SIGPLAN '90, pp. 112-126.
Last Updated May 18, 2001