diff --git a/src/number.rs b/src/number.rs index 9c1acd1a8..39f48a50f 100644 --- a/src/number.rs +++ b/src/number.rs @@ -292,10 +292,9 @@ impl Display for Number { #[cfg(not(feature = "arbitrary_precision"))] fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { match self.n { - N::PosInt(u) => Display::fmt(&u, formatter), - N::NegInt(i) => Display::fmt(&i, formatter), - // Preserve `.0` on integral values, which Display hides - N::Float(f) => Debug::fmt(&f, formatter), + N::PosInt(u) => formatter.write_str(itoa::Buffer::new().format(u)), + N::NegInt(i) => formatter.write_str(itoa::Buffer::new().format(i)), + N::Float(f) => formatter.write_str(ryu::Buffer::new().format(f)), } } diff --git a/tests/debug.rs b/tests/debug.rs index 0535bfdd1..8ddcf5a38 100644 --- a/tests/debug.rs +++ b/tests/debug.rs @@ -28,6 +28,7 @@ fn value_number() { assert_eq!(format!("{:?}", json!(-1)), "Number(-1)"); assert_eq!(format!("{:?}", json!(1.0)), "Number(1.0)"); assert_eq!(Number::from_f64(1.0).unwrap().to_string(), "1.0"); // not just "1" + assert_eq!(Number::from_f64(12e40).unwrap().to_string(), "1.2e41"); } #[test]