pub fn percent(numerator: u64, denominator: u64) -> Option<u64>Expand description
Calculate numerator divided by denominator as a percentage.
When numerator is very large we cannot multiply it by 100 without risking
wrapping, so this is careful to use checked arithmetic to avoid wrapping or
overflow. It scales down numerator and denominator by powers of two
until a percentage can be calculated. If denominator is zero, returns
None.
assert_eq!(percent(100, 1000), Some(10));
assert_eq!(percent(104, 1000), Some(10));
assert_eq!(percent(105, 1000), Some(11)); // <-- Rounds.
assert_eq!(percent(u64::MAX, 1), None); // Overflow.
assert_eq!(percent(0, u64::MAX), Some(0));
assert_eq!(percent(1, u64::MAX), Some(0));
assert_eq!(percent(u64::MAX, u64::MAX), Some(100));
assert_eq!(percent(u64::MAX / 100, u64::MAX), Some(1));
assert_eq!(percent(u64::MAX >> 1, u64::MAX), Some(50));