@@ -71,9 +71,13 @@ impl ScalarFormatter {
7171    } 
7272
7373    pub  fn  round_significant ( value :  f64 ,  precision :  usize )  -> f64  { 
74-         let  shift = precision as  i32  - value. abs ( ) . log10 ( ) . ceil ( )  as  i32 ; 
75-         let  shift_factor = 10_f64 . powi ( shift) ; 
76-         ( value *  shift_factor) . round ( )  / shift_factor
74+         if  value. abs ( )  < EPSILON  { 
75+             return  0.0 ; 
76+         }  else  { 
77+             let  shift = precision as  i32  - value. abs ( ) . log10 ( ) . ceil ( )  as  i32 ; 
78+             let  shift_factor = 10_f64 . powi ( shift) ; 
79+             ( value *  shift_factor) . round ( )  / shift_factor
80+         } 
7781    } 
7882} 
7983
@@ -825,4 +829,29 @@ mod tests {
825829        assert_eq ! ( expected,  expected. to_string( ) . parse( ) ?) ; 
826830        Ok ( ( ) ) 
827831    } 
832+ 
833+     #[ test]  
834+     fn  test_scalar_format ( )  -> Result < ( ) ,  Error >  { 
835+         let  value:  Scalar  = 0.1234567 ; 
836+         assert_eq ! ( format!( "{}" ,  ScalarFormat ( value) ) ,  "0.1235" . to_owned( ) ) ; 
837+         assert_eq ! ( format!( "{:#}" ,  ScalarFormat ( value) ) ,  "0.1235" . to_owned( ) ) ; 
838+         assert_eq ! ( format!( "{:.3}" ,  ScalarFormat ( value) ) ,  "0.123" . to_owned( ) ) ; 
839+ 
840+         let  value:  Scalar  = 12.3001 ; 
841+         assert_eq ! ( format!( "{}" ,  ScalarFormat ( value) ) ,  "12.30" . to_owned( ) ) ; 
842+         assert_eq ! ( format!( "{:#}" ,  ScalarFormat ( value) ) ,  "12.3" . to_owned( ) ) ; 
843+         assert_eq ! ( format!( "{:.3}" ,  ScalarFormat ( value) ) ,  "12.3" . to_owned( ) ) ; 
844+ 
845+         let  value:  Scalar  = 12300.0 ; 
846+         assert_eq ! ( format!( "{}" ,  ScalarFormat ( value) ) ,  "12300" . to_owned( ) ) ; 
847+         assert_eq ! ( format!( "{:#}" ,  ScalarFormat ( value) ) ,  "12300" . to_owned( ) ) ; 
848+         assert_eq ! ( format!( "{:.3}" ,  ScalarFormat ( value) ) ,  "12300" . to_owned( ) ) ; 
849+ 
850+         let  value:  Scalar  = 0.0 ; 
851+         assert_eq ! ( format!( "{}" ,  ScalarFormat ( value) ) ,  "0" . to_owned( ) ) ; 
852+         assert_eq ! ( format!( "{:#}" ,  ScalarFormat ( value) ) ,  "0" . to_owned( ) ) ; 
853+         assert_eq ! ( format!( "{:.3}" ,  ScalarFormat ( value) ) ,  "0" . to_owned( ) ) ; 
854+ 
855+         Ok ( ( ) ) 
856+     } 
828857} 
0 commit comments