#[cfg(test)]
mod tests;
#[doc(hidden)]
pub struct Decimal {
digits: [u8; 39],
start: usize,
}
impl Decimal {
#[doc(hidden)]
pub fn new(n: u128) -> Decimal {
let mut decimal = Decimal { digits: [0; 39], start: 39 };
match u64::try_from(n) {
Ok(mut n) => loop {
decimal.start -= 1;
decimal.digits[decimal.start] = b'0' + (n % 10) as u8;
n /= 10;
if n == 0 {
break;
}
},
Err(_) => {
let mut n = n;
loop {
decimal.start -= 1;
decimal.digits[decimal.start] = b'0' + (n % 10) as u8;
n /= 10;
if n == 0 {
break;
}
}
}
}
decimal
}
#[doc(hidden)]
pub fn as_str(&self) -> &str {
std::str::from_utf8(&self.digits[self.start..]).unwrap_or("")
}
}