pub(crate) fn decimal(mantissa: i128, exp10: i32) -> String {
if exp10 >= 0 {
if mantissa == 0 {
return "0".to_string();
}
let mut s = mantissa.to_string();
s.extend(std::iter::repeat_n('0', exp10 as usize));
return s;
}
let fraction_digits = exp10.unsigned_abs() as usize;
let sign = if mantissa < 0 { "-" } else { "" };
let digits = mantissa.unsigned_abs().to_string();
let (integer, fraction) = if digits.len() > fraction_digits {
let split = digits.len() - fraction_digits;
(digits[..split].to_string(), digits[split..].to_string())
} else {
let padding = "0".repeat(fraction_digits - digits.len());
("0".to_string(), format!("{padding}{digits}"))
};
format!("{sign}{integer}.{fraction}")
}
#[cfg(test)]
#[path = "tests/format_tests.rs"]
mod tests;