Skip to content

'pick_appropriate_units()': precision versus prettiness #24

@alberdingk-thijm

Description

@alberdingk-thijm

I noticed recently that, due to the strict bounds checking in pick_appropriate_units() in src/measurement.rs, that the following code was not producing the output I was expecting:

extern crate measurements;
use measurements::*;

fn main() {
    let val : f64 = 1.0;
    println!("Mass of {0:.3}", Mass::from_kilograms(val));
    println!("Length of {0:.3}", Length::from_meters(val));
    println!("Volume of {0:.3}", Volume::from_litres(val));
}

prints the following:

Mass of 1000.000 g
Length of 100.000 cm
Volume of 1000.000 ml

whereas I had expected it to print:

Mass of 1.000 kg
Length of 1.000 m
Volume of 1.000 l

I figure the former is perhaps more precise, but seemed a bit ugly for display when dealing with units which didn't need that precision, particularly given that if I change val to be 1.00000000001, I get the output I was expecting (due to precision formatting).

I've gone and updated my branch to use the latter by changing value > 1.0 || value < -1.0 to value >= 1.0 || value <= -1.0 in pick_appropriate_units(). If this is something that is generally more useful, or something to offer as an opt-in, I'd be happy to submit a PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions