@@ -140,7 +140,7 @@ pub fn format_exponent(precision: usize, magnitude: f64, case: Case) -> String {
140
140
pub fn format_general ( precision : usize , magnitude : f64 , case : Case ) -> String {
141
141
match magnitude {
142
142
magnitude if magnitude. is_finite ( ) => {
143
- let r_exp = format ! ( "{:.*e}" , precision, magnitude) ;
143
+ let r_exp = format ! ( "{:.*e}" , precision - 1 , magnitude) ;
144
144
let mut parts = r_exp. splitn ( 2 , 'e' ) ;
145
145
let base = parts. next ( ) . unwrap ( ) ;
146
146
let exponent = parts. next ( ) . unwrap ( ) . parse :: < i64 > ( ) . unwrap ( ) ;
@@ -149,9 +149,16 @@ pub fn format_general(precision: usize, magnitude: f64, case: Case) -> String {
149
149
Case :: Lower => 'e' ,
150
150
Case :: Upper => 'E' ,
151
151
} ;
152
+
153
+ let mut base = format ! ( "{:.*}" , precision + 1 , base) ;
154
+ while base. ends_with ( '0' ) || base. ends_with ( '.' ) {
155
+ base. truncate ( base. len ( ) - 1 ) ;
156
+ }
152
157
format ! ( "{}{}{:+#03}" , base, e, exponent)
153
158
} else {
154
- format ! ( "{}" , magnitude)
159
+ let precision = ( precision as i64 ) - 1 - exponent;
160
+ let precision = precision as usize ;
161
+ format ! ( "{:.*}" , precision, magnitude)
155
162
}
156
163
}
157
164
magnitude if magnitude. is_nan ( ) => format_nan ( case) ,
0 commit comments