| 1 | module strconv |
| 2 | |
| 3 | /* |
| 4 | f32/f64 ftoa functions |
| 5 | |
| 6 | Copyright (c) 2019-2024 Dario Deledda. All rights reserved. |
| 7 | Use of this source code is governed by an MIT license |
| 8 | that can be found in the LICENSE file. |
| 9 | |
| 10 | This file contains the f32/f64 ftoa functions |
| 11 | |
| 12 | These functions are based on the work of: |
| 13 | Publication:PLDI 2018: Proceedings of the 39th ACM SIGPLAN |
| 14 | Conference on Programming Language Design and ImplementationJune 2018 |
| 15 | Pages 270–282 https://doi.org/10.1145/3192366.3192369 |
| 16 | |
| 17 | inspired by the Go version here: |
| 18 | https://github.com/cespare/ryu/tree/ba56a33f39e3bbbfa409095d0f9ae168a595feea |
| 19 | */ |
| 20 | |
| 21 | // ftoa_64 returns a string in scientific notation with max 17 digits after the dot. |
| 22 | // Example: assert strconv.ftoa_64(123.1234567891011121) == '1.2312345678910111e+02' |
| 23 | @[inline] |
| 24 | pub fn ftoa_64(f f64) string { |
| 25 | return f64_to_str(f, 17) |
| 26 | } |
| 27 | |
| 28 | // ftoa_long_64 returns `f` as a `string` in decimal notation with a maximum of 17 digits after the dot. |
| 29 | // Example: assert strconv.f64_to_str_l(123.1234567891011121) == '123.12345678910111' |
| 30 | @[inline] |
| 31 | pub fn ftoa_long_64(f f64) string { |
| 32 | return f64_to_str_l(f) |
| 33 | } |
| 34 | |
| 35 | // ftoa_32 returns a `string` in scientific notation with max 8 digits after the dot. |
| 36 | // Example: assert strconv.ftoa_32(34.1234567) == '3.4123455e+01' |
| 37 | @[inline] |
| 38 | pub fn ftoa_32(f f32) string { |
| 39 | return f32_to_str(f, 8) |
| 40 | } |
| 41 | |
| 42 | // ftoa_long_32 returns `f` as a `string` in decimal notation with a maximum of 8 digits after the dot. |
| 43 | // Example: assert strconv.ftoa_long_32(0.1234567901) == '0.12345679' |
| 44 | @[inline] |
| 45 | pub fn ftoa_long_32(f f32) string { |
| 46 | return f32_to_str_l(f) |
| 47 | } |
| 48 | |