2020-10-07 11:06:52 +03:00
|
|
|
|
module strconv
|
|
|
|
|
|
2020-06-08 00:04:23 +03:00
|
|
|
|
/*
|
|
|
|
|
f32/f64 ftoa functions
|
|
|
|
|
|
2022-01-04 12:21:08 +03:00
|
|
|
|
Copyright (c) 2019-2022 Dario Deledda. All rights reserved.
|
2020-06-08 00:04:23 +03:00
|
|
|
|
Use of this source code is governed by an MIT license
|
|
|
|
|
that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
|
|
This file contains the f32/f64 ftoa functions
|
|
|
|
|
|
|
|
|
|
These functions are based on the work of:
|
2020-07-16 20:01:22 +03:00
|
|
|
|
Publication:PLDI 2018: Proceedings of the 39th ACM SIGPLAN
|
|
|
|
|
Conference on Programming Language Design and ImplementationJune 2018
|
2020-06-08 00:04:23 +03:00
|
|
|
|
Pages 270–282 https://doi.org/10.1145/3192366.3192369
|
|
|
|
|
|
2020-07-16 20:01:22 +03:00
|
|
|
|
inspired by the Go version here:
|
2020-06-08 00:04:23 +03:00
|
|
|
|
https://github.com/cespare/ryu/tree/ba56a33f39e3bbbfa409095d0f9ae168a595feea
|
|
|
|
|
*/
|
2020-02-25 13:12:37 +03:00
|
|
|
|
|
2022-04-26 18:09:36 +03:00
|
|
|
|
// ftoa_64 returns a string in scientific notation with max 17 digits after the dot.
|
|
|
|
|
//
|
|
|
|
|
// Example: assert strconv.ftoa_64(123.1234567891011121) == '1.2312345678910111e+02'
|
2020-02-25 13:12:37 +03:00
|
|
|
|
[inline]
|
|
|
|
|
pub fn ftoa_64(f f64) string {
|
2021-06-18 17:59:56 +03:00
|
|
|
|
return f64_to_str(f, 17)
|
2020-02-25 13:12:37 +03:00
|
|
|
|
}
|
|
|
|
|
|
2022-04-26 18:09:36 +03:00
|
|
|
|
// ftoa_long_64 returns `f` as a `string` in decimal notation with a maximum of 17 digits after the dot.
|
|
|
|
|
//
|
|
|
|
|
// Example: assert strconv.f64_to_str_l(123.1234567891011121) == '123.12345678910111'
|
2020-02-25 13:12:37 +03:00
|
|
|
|
[inline]
|
|
|
|
|
pub fn ftoa_long_64(f f64) string {
|
|
|
|
|
return f64_to_str_l(f)
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-26 18:09:36 +03:00
|
|
|
|
// ftoa_32 returns a `string` in scientific notation with max 8 digits after the dot.
|
|
|
|
|
//
|
|
|
|
|
// Example: assert strconv.ftoa_32(34.1234567) == '3.4123455e+01'
|
2020-02-25 13:12:37 +03:00
|
|
|
|
[inline]
|
|
|
|
|
pub fn ftoa_32(f f32) string {
|
2021-06-18 17:59:56 +03:00
|
|
|
|
return f32_to_str(f, 8)
|
2020-02-25 13:12:37 +03:00
|
|
|
|
}
|
|
|
|
|
|
2022-04-26 18:09:36 +03:00
|
|
|
|
// ftoa_long_32 returns `f` as a `string` in decimal notation with a maximum of 6 digits after the dot.
|
|
|
|
|
//
|
|
|
|
|
// Example: assert strconv.ftoa_long_32(34.1234567) == '34.12346'
|
2020-02-25 13:12:37 +03:00
|
|
|
|
[inline]
|
|
|
|
|
pub fn ftoa_long_32(f f32) string {
|
|
|
|
|
return f32_to_str_l(f)
|
|
|
|
|
}
|