Skip to main content

cuqueclicker_lib/
format.rs

1const SUFFIXES: &[&str] = &[
2    "", "k", "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc", "No", "Dc",
3];
4
5pub fn big(n: f64) -> String {
6    if n.is_nan() || n.is_infinite() {
7        return "?".into();
8    }
9    if n < 1000.0 {
10        return format!("{}", n.floor() as u64);
11    }
12    let mag = (n.log10() / 3.0).floor() as i32;
13    let idx = mag.clamp(0, (SUFFIXES.len() - 1) as i32) as usize;
14    let scaled = n / 10f64.powi((idx * 3) as i32);
15    format!("{:.2}{}", scaled, SUFFIXES[idx])
16}
17
18pub fn rate(n: f64) -> String {
19    if n < 10.0 {
20        format!("{:.2}", n)
21    } else if n < 100.0 {
22        format!("{:.1}", n)
23    } else {
24        big(n)
25    }
26}
27
28pub fn duration(secs: u64) -> String {
29    let h = secs / 3600;
30    let m = (secs % 3600) / 60;
31    let s = secs % 60;
32    if h > 0 {
33        format!("{}h {:02}m {:02}s", h, m, s)
34    } else if m > 0 {
35        format!("{}m {:02}s", m, s)
36    } else {
37        format!("{}s", s)
38    }
39}