[][src]Trait flt2dec2flt::FloatExt

pub trait FloatExt: Sealed + Sized {
    fn preformat_shortest(self, buf: &mut [u8]) -> PreFormatted;
fn preformat_exact_exp(
        self,
        buf: &mut [u8],
        num_digits: usize
    ) -> PreFormatted;
fn preformat_exact_fixed(
        self,
        buf: &mut [u8],
        num_frac_digits: usize
    ) -> PreFormatted;
fn from_preparsed(preparsed: PreParsed) -> Option<Self>; }

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

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);
Loading content...

Implementors

impl FloatExt for f32[src]

impl FloatExt for f64[src]

Loading content...