From 3b5623b3503c5e327fe2bead9ef4a000261ebde4 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Sun, 24 Jul 2022 14:06:42 +0200 Subject: [PATCH] numfmt: don't round floats if --from is "none" --- src/uu/numfmt/src/format.rs | 10 +++++++++- src/uu/numfmt/src/units.rs | 1 + tests/by-util/test_numfmt.rs | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/uu/numfmt/src/format.rs b/src/uu/numfmt/src/format.rs index 0512779ca37..45b32f25a40 100644 --- a/src/uu/numfmt/src/format.rs +++ b/src/uu/numfmt/src/format.rs @@ -145,7 +145,15 @@ fn transform_from(s: &str, opts: &TransformOptions) -> Result { let (i, suffix) = parse_suffix(s)?; let i = i * (opts.from_unit as f64); - remove_suffix(i, suffix, &opts.from).map(|n| if n < 0.0 { -n.abs().ceil() } else { n.ceil() }) + remove_suffix(i, suffix, &opts.from).map(|n| { + if opts.from == Unit::None { + n + } else if n < 0.0 { + -n.abs().ceil() + } else { + n.ceil() + } + }) } /// Divide numerator by denominator, with rounding. diff --git a/src/uu/numfmt/src/units.rs b/src/uu/numfmt/src/units.rs index a2c7b356831..4a0b8a36e8f 100644 --- a/src/uu/numfmt/src/units.rs +++ b/src/uu/numfmt/src/units.rs @@ -17,6 +17,7 @@ pub const IEC_BASES: [f64; 10] = [ pub type WithI = bool; +#[derive(PartialEq)] pub enum Unit { Auto, Si, diff --git a/tests/by-util/test_numfmt.rs b/tests/by-util/test_numfmt.rs index f52c777b561..e5c81957310 100644 --- a/tests/by-util/test_numfmt.rs +++ b/tests/by-util/test_numfmt.rs @@ -2,6 +2,14 @@ use crate::common::util::*; +#[test] +fn test_should_not_round_floats() { + new_ucmd!() + .args(&["1.1", "1.22", ".1", "-0.1"]) + .succeeds() + .stdout_is("1.1\n1.22\n0.1\n-0.1\n"); +} + #[test] fn test_from_si() { new_ucmd!()