Macro format_value

Source
macro_rules! format_value {
    ($name:ident, $fmt_str:literal) => { ... };
    ($name:ident, $fmt_str:literal, groupings: $separator:expr) => { ... };
    ($name:ident, $fmt_str:literal, groupings: $separator:expr, no_unit) => { ... };
}
Expand description

Formats a Value’s mantissa and unit prefix (but not the unit itself). Because it simply delegates to format_args!(), the output should be consumed by macros such as println!(), write!(), etc.

It provides more control than the Display implementation in Value because you can provide the number formatting.

§Example

use si_scale::{value::Value, format_value};

let x = 3.4e-12f32;
let v: Value = x.into();
let unit = "F"; // just something displayable.

let actual = format!("result is {}{u}",
    format_value!(v, "{:>8.2}"), u = unit
);
let expected = "result is     3.40 pF";
assert_eq!(actual, expected);

// left alignment

let actual = format!("result is {}{u}",
    format_value!(v, "{:<8.3}"), u = unit
);
let expected = "result is 3.400    pF";
assert_eq!(actual, expected);

Additionally, you can provide a symbol for thousands’ groupings.

§Example

In this example, the number x is converted into a value and displayed using the most appropriate SI prefix. The user chose to constrain the prefix to be anything lower than Unit (1) because kilo-seconds make no sense.

use si_scale::format_value;
use si_scale::{value::Value, base::Base, prefix::Constraint};

let x = 1234.5678;
let v = Value::new_with(x, Base::B1000, Constraint::UnitAndBelow);
let unit = "s";

let actual = format!(
    "result is {}{u}",
    format_value!(v, "{:.5}", groupings: '_'),
    u = unit
);
let expected = "result is 1_234.567_80 s";
assert_eq!(actual, expected);