hru(1): improved SI prefix logic
This commit is contained in:
parent
1299aefc39
commit
e3a0069180
40
src/hru.rs
40
src/hru.rs
@ -27,13 +27,25 @@ extern crate sysexits;
|
|||||||
|
|
||||||
use sysexits::{ EX_DATAERR, EX_SOFTWARE };
|
use sysexits::{ EX_DATAERR, EX_SOFTWARE };
|
||||||
|
|
||||||
fn convert(input: u128) -> Result<(f64, u32), String> {
|
const LIST: [(u32, &str); 10] = [
|
||||||
let list: Vec<u32> = vec![3, 6, 9, 12, 15, 18, 21, 24, 27, 30];
|
(3, "K"),
|
||||||
let mut out = (0.0, 0_u32);
|
(6, "M"),
|
||||||
|
(9, "G"),
|
||||||
|
(12, "T"),
|
||||||
|
(15, "P"),
|
||||||
|
(18, "E"),
|
||||||
|
(21, "Z"),
|
||||||
|
(24, "Y"),
|
||||||
|
(27, "R"),
|
||||||
|
(30, "Q")
|
||||||
|
];
|
||||||
|
|
||||||
if input < 1000 { return Ok((input as f64, 0)); }
|
fn convert(input: u128) -> Result<(f64, (u32, &'static str)), String> {
|
||||||
|
|
||||||
for n in list {
|
let mut out = (input as f64, (0_u32, ""));
|
||||||
|
if input < 1000 { return Ok(out); }
|
||||||
|
|
||||||
|
for (n, p) in LIST {
|
||||||
let c = match 10_u128.checked_pow(n) {
|
let c = match 10_u128.checked_pow(n) {
|
||||||
Some(c) => c,
|
Some(c) => c,
|
||||||
None => {
|
None => {
|
||||||
@ -43,10 +55,10 @@ fn convert(input: u128) -> Result<(f64, u32), String> {
|
|||||||
|
|
||||||
match c.cmp(&input) {
|
match c.cmp(&input) {
|
||||||
Ordering::Less => {
|
Ordering::Less => {
|
||||||
out = (input as f64 / c as f64, n);
|
out = (input as f64 / c as f64, (n, p));
|
||||||
},
|
},
|
||||||
Ordering::Equal => {
|
Ordering::Equal => {
|
||||||
return Ok((input as f64 / c as f64, n));
|
return Ok((input as f64 / c as f64, (n, p)));
|
||||||
},
|
},
|
||||||
Ordering::Greater => {},
|
Ordering::Greater => {},
|
||||||
};
|
};
|
||||||
@ -80,19 +92,7 @@ fn main() -> ExitCode {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let si_prefix = format!("{}B", match prefix {
|
let si_prefix = format!("{}B", prefix.1);
|
||||||
3 => "K",
|
|
||||||
6 => "M",
|
|
||||||
9 => "G",
|
|
||||||
12 => "T",
|
|
||||||
15 => "P",
|
|
||||||
18 => "E",
|
|
||||||
21 => "Z",
|
|
||||||
24 => "Y",
|
|
||||||
27 => "R",
|
|
||||||
30 => "Q",
|
|
||||||
_ => "",
|
|
||||||
});
|
|
||||||
|
|
||||||
let out = ((number * 10.0).round() / 10.0).to_string();
|
let out = ((number * 10.0).round() / 10.0).to_string();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user