use ssf_rs::jsnum::{Precision, to_precision_with};
pub fn number_to_text(v: f64) -> String {
let rounded: f64 = to_precision_with(v, 15, Precision::Excel15)
.parse()
.unwrap_or(v);
rounded.to_string()
}
#[cfg(test)]
mod tests {
use super::number_to_text;
#[test]
fn caps_at_fifteen_significant_digits() {
assert_eq!(number_to_text(1.0 / 3.0), "0.333333333333333");
assert_eq!(number_to_text(2.0 / 3.0), "0.666666666666667");
assert_eq!(number_to_text(0.1 + 0.2), "0.3");
assert_eq!(number_to_text(2.0_f64.sqrt()), "1.4142135623731");
}
#[test]
fn leaves_alone_what_was_already_right() {
assert_eq!(number_to_text(1.0), "1");
assert_eq!(number_to_text(1.5), "1.5");
assert_eq!(number_to_text(0.25), "0.25");
assert_eq!(number_to_text(100.0), "100");
assert_eq!(number_to_text(1234.5678), "1234.5678");
assert_eq!(number_to_text(1e-7), "0.0000001");
assert_eq!(number_to_text(-1.0 / 3.0), "-0.333333333333333");
}
}