pub fn round(value: f64, precision: u32) -> f64 {
let multiplier = 10_f64.powi(precision as i32);
(value * multiplier).round() / multiplier
}
pub fn floor(value: f64, precision: u32) -> f64 {
let multiplier = 10_f64.powi(precision as i32);
(value * multiplier).floor() / multiplier
}
pub fn ceil(value: f64, precision: u32) -> f64 {
let multiplier = 10_f64.powi(precision as i32);
(value * multiplier).ceil() / multiplier
}
#[inline]
pub fn clamp<T: PartialOrd>(value: T, min: T, max: T) -> T {
if value < min {
min
} else if value > max {
max
} else {
value
}
}
pub fn in_range<T: PartialOrd>(value: T, range: core::ops::Range<T>) -> bool {
value >= range.start && value < range.end
}