pub fn usize_to_u16_saturating(n: usize) -> u16 {
u16::try_from(n).unwrap_or(u16::MAX)
}
pub fn ratio_to_whole_percent(ratio: f32) -> u32 {
let pct = (ratio.clamp(0.0, 1.0) * 100.0).round();
#[allow(clippy::cast_sign_loss, clippy::cast_possible_truncation)]
let pct = pct as u32;
pct
}
pub fn whole_percent_to_ratio(pct: u32) -> f32 {
#[allow(clippy::cast_precision_loss)]
let pct = pct as f32;
pct / 100.0
}
pub fn ratio_to_unit_count(ratio: f64, total_units: usize) -> usize {
let ratio = ratio.clamp(0.0, 1.0);
#[allow(clippy::cast_precision_loss)]
let total_f = total_units as f64;
let count = (ratio * total_f).round();
#[allow(clippy::cast_sign_loss, clippy::cast_possible_truncation)]
let count = count as usize;
count.min(total_units)
}