stdlib-js / stdlib-js/stdlib

[RFC]: add support for serializing a number to a string while avoiding exponential notation

Abierto
#581 4 comentarios 0 reacciones 0 asignados Ver en GitHub
difficulty: 3 Feature JavaScript Needs Discussion priority: Normal RFC Utilities
Lenguaje dominante
JavaScript
Estrellas
6k
Forks
1.3k
Merge medio
1 d 3 h
PR fusionados (30 d)
611

Descripción

### Description

This RFC proposes serializing a number to string while avoiding exponential notation.

The default behavior for JavaScript runtimes when serializing either very large (>=10^21) or very small (<10^-6) numbers to a string is to convert them to exponential notation. E.g.,

```javascript
In [1]: (1 * base.pow(10,308)).toString()
Out[1]: '1e+308'

In [2]: (1 * base.pow(10,-323)).toString()
Out[2]: '1e-323'
```

However, in certain circumstances, you may want to avoid serializing to exponential notation and may prefer printing all digits (e.g., see [discussion](https://github.com/stdlib-js/stdlib/pull/563#discussion_r1006224348)).

For example, the following may be desirable behavior

```javascript
var str = serialize( 1e50 );
// returns '100000000000000000000000000000000000000000000000000'
```

This RFC proposes to add support for such behavior.

Package: `@stdlib/number/to-string` (?)
alias: `number2string`

### Related Issues

No.

### Questions

Built-in [`Number.prototype.toString( [radix] )`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) supports an optional `radix` argument. The proposed API would also support this argument, but also support an options object.

```javascript
/**
* Serializes a number to a string.
*
* @param {(PositiveInteger|Options)} [options] - radix or options
* @param {PositiveInteger} [options.radix] - radix
* @param {boolean} [options.exponential=true] - boolean indicating whether to serialize very large and very small values to exponential notation
* @throws {TypeError} must provide either a positive integer or an options object
* @throws {TypeError} must provide valid options
* @throws {RangeError} radix must be a positive integer on the interval [2, 36]
* @returns {string} serialized number
*/
function number2string( options ) {
// implementation...
}
```

Questions:

- Is overloading the existing built-in API desirable?
- Should serializing a number to a string in non-exponential format be a different package? If so, what would be that package's name?

### Other

Prior art:

- [SO](https://stackoverflow.com/questions/1685680/how-to-avoid-scientific-notation-for-large-numbers-in-javascript)

### Checklist

- [X] I have read and understood the [Code of Conduct](https://github.com/stdlib-js/stdlib/blob/develop/CODE_OF_CONDUCT.md).
- [X] Searched for existing issues and pull requests.
- [X] The issue name begins with `RFC:`.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.