scientific 0.5.3

Arbitrary precision scientific number (no_std capable, in pure Rust)
Documentation
use crate::types::sci::Sci;
use core::fmt::{Formatter, Write};

impl Sci {
  pub(crate) fn nz_display<W: Write>(&self, f: &mut W) -> Result<(), core::fmt::Error> {
    if self.sign.is_negative() {
      f.write_char('-')?;
    }
    let exp = self.exponent0();
    #[allow(clippy::manual_range_contains)]
    if exp >= -1 && exp <= 0 {
      f.write_char('0')?;
      f.write_char('.')?;
      for _ in exp..0 {
        f.write_char('0')?;
      }
      self.data.write_chars(f, 0..self.len)?;
    } else if exp > 1 && exp <= 7 {
      let mid = exp.min(self.len);
      self.data.write_chars(f, 0..mid)?;
      for _ in mid..exp {
        f.write_char('0')?;
      }
      if self.len > exp {
        f.write_char('.')?;
        self.data.write_chars(f, exp..self.len)?;
      }
    } else {
      self.data.write_char(f, 0)?;
      if self.len > 1 {
        f.write_char('.')?;
        self.data.write_chars(f, 1..self.len)?;
      }
      if exp != 1 {
        write!(f, "e{}", exp - 1)?;
      }
    }
    Ok(())
  }

  pub(crate) fn display(&self, f: &mut Formatter<'_>) -> Result<(), core::fmt::Error> {
    if self.is_zero() {
      f.write_char('0')
    } else {
      self.nz_display(f)
    }
  }
}