[−][src]Trait flt2dec2flt::FloatExt
This trait is used to extend f32
and f64
.
Provides low-level methods to convert floating point numbers to decimal strings and vice versa.
Required methods
fn preformat_shortest(self, buf: &mut [u8]) -> PreFormatted
Pre-formats self
with the lowest lowest number of significant
digits without lossing precision.
buf
must be at least flt2dec2flt::PREFORMAT_SHORTEST_BUF_LEN
long.
Example
use flt2dec2flt::FloatExt as _; let mut buf = [0; flt2dec2flt::PREFORMAT_SHORTEST_BUF_LEN]; let preformatted = f32::preformat_shortest(12.34, &mut buf); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"1234", 2)); let preformatted = f32::preformat_shortest(0.00401, &mut buf); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"401", -2)); let preformatted = f32::preformat_shortest(330.0, &mut buf); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"33", 3)); let preformatted = f32::preformat_shortest(4.58e31, &mut buf); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"458", 32)); let preformatted = f32::preformat_shortest(4.58e-31, &mut buf); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"458", -30));
fn preformat_exact_exp(self, buf: &mut [u8], num_digits: usize) -> PreFormatted
Pre-formats a f32
with an exact number of significant digits.
buf
must be at least num_digits
long.
Example
use flt2dec2flt::FloatExt as _; let mut buf = [0; 10]; let preformatted = f32::preformat_exact_exp(200.0, &mut buf, 2); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"20", 3)); let preformatted = f32::preformat_exact_exp(0.012, &mut buf, 3); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"120", -1)); let preformatted = f32::preformat_exact_exp(12.34, &mut buf, 5); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"12340", 2)); let preformatted = f32::preformat_exact_exp(12.3456, &mut buf, 5); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"12346", 2)); let preformatted = f32::preformat_exact_exp(4.0, &mut buf, 10); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"4000000000", 1));
fn preformat_exact_fixed(
self,
buf: &mut [u8],
num_frac_digits: usize
) -> PreFormatted
self,
buf: &mut [u8],
num_frac_digits: usize
) -> PreFormatted
Pre-formats a f32
with an exact number of fractional digits.
buf
must be at least flt2dec2flt::PREFORMAT_EXACT_FIXED_BASE_BUF_LEN + num_frac_digits
.
use flt2dec2flt::FloatExt as _; let mut buf = [0; flt2dec2flt::PREFORMAT_EXACT_FIXED_BASE_BUF_LEN + 10]; let preformatted = f32::preformat_exact_fixed(12.34, &mut buf, 4); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"123400", 2)); let preformatted = f32::preformat_exact_fixed(12.3456, &mut buf, 2); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"1235", 2)); let preformatted = f32::preformat_exact_fixed(200.0, &mut buf, 2); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"20000", 3)); // Note that leading zeros count as digits but are omitted. let preformatted = f32::preformat_exact_fixed(0.03, &mut buf, 3); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Finite(false, b"30", -1)); let preformatted = f32::preformat_exact_fixed(0.3e-4, &mut buf, 2); assert_eq!(preformatted, flt2dec2flt::PreFormatted::Zero(false));
fn from_preparsed(preparsed: PreParsed) -> Option<Self>
Creates a floating point number from a pre-parsed decimal
floating point number (see PreParsed
).
Example
use flt2dec2flt::FloatExt as _; let v = f32::from_preparsed(flt2dec2flt::PreParsed { sign: false, int_digits: b"12", frac_digits: b"34", exp: 0, }); assert!((v.unwrap() - 12.34).abs() < 1e-9); let v = f32::from_preparsed(flt2dec2flt::PreParsed { sign: false, int_digits: b"0", frac_digits: b"41", exp: -4, }); assert!((v.unwrap() - 0.41e-4).abs() < 1e-12);
Implementors
impl FloatExt for f32
[src]
fn preformat_shortest(self, buf: &mut [u8]) -> PreFormatted
[src]
fn preformat_exact_exp(self, buf: &mut [u8], num_digits: usize) -> PreFormatted
[src]
fn preformat_exact_fixed(
self,
buf: &mut [u8],
num_frac_digits: usize
) -> PreFormatted
[src]
self,
buf: &mut [u8],
num_frac_digits: usize
) -> PreFormatted
fn from_preparsed(preparsed: PreParsed) -> Option<Self>
[src]
impl FloatExt for f64
[src]
fn preformat_shortest(self, buf: &mut [u8]) -> PreFormatted
[src]
fn preformat_exact_exp(self, buf: &mut [u8], num_digits: usize) -> PreFormatted
[src]
fn preformat_exact_fixed(
self,
buf: &mut [u8],
num_frac_digits: usize
) -> PreFormatted
[src]
self,
buf: &mut [u8],
num_frac_digits: usize
) -> PreFormatted