static ZEROS: &str = "0000000000000000000000000000000000000000";
&ZEROS[..n]
}
- fn is_all_zeros(s: &[u8]) -> bool {
- s.iter().all(|b| *b == b'0')
- }
if exponent >= 0 && exponent < digits.len() as i32 {
// The first `exponent` digits are before the decimal point. We
// need to round off there.
let exp = exponent as usize;
- let should_round_up = match digits[exp] {
- /*
- b'5' if is_all_zeros(&digits[exp + 1..]) => {
- let prev_digit = if exp > 0 { digits[exp - 1] - b'0' } else { 0 };
- (prev_digit % 2) == 1
- }*/
- b'0'..=b'4' => false,
- b'5'..=b'9' => true,
- _ => unreachable!(),
- };
fn round_up(digits: &mut [u8], position: usize) -> bool {
for index in (0..position).rev() {
false
}
- if should_round_up && !round_up(digits, exp) {
+ if digits[exp] >= b'5' && !round_up(digits, exp) {
s[0] = b'1';
digits = &mut s[..e_index];
exponent += 1;