@@ -304,6 +304,16 @@ impl TimeDelta {
304
304
if self . secs < 0 && self . nanos > 0 { self . secs + 1 } else { self . secs }
305
305
}
306
306
307
+ /// Returns the fractional number of seconds in the `TimeDelta`.
308
+ pub fn as_seconds_f64 ( self ) -> f64 {
309
+ self . secs as f64 + self . nanos as f64 / NANOS_PER_SEC as f64
310
+ }
311
+
312
+ /// Returns the fractional number of seconds in the `TimeDelta`.
313
+ pub fn as_seconds_f32 ( self ) -> f32 {
314
+ self . secs as f32 + self . nanos as f32 / NANOS_PER_SEC as f32
315
+ }
316
+
307
317
/// Returns the total number of whole milliseconds in the `TimeDelta`.
308
318
pub const fn num_milliseconds ( & self ) -> i64 {
309
319
// A proper TimeDelta will not overflow, because MIN and MAX are defined such
@@ -788,6 +798,32 @@ mod tests {
788
798
let _ = TimeDelta :: seconds ( -i64:: MAX / 1_000 - 1 ) ;
789
799
}
790
800
801
+ #[ test]
802
+ fn test_duration_as_seconds_f64 ( ) {
803
+ assert_eq ! ( TimeDelta :: seconds( 1 ) . as_seconds_f64( ) , 1.0 ) ;
804
+ assert_eq ! ( TimeDelta :: seconds( -1 ) . as_seconds_f64( ) , -1.0 ) ;
805
+ assert_eq ! ( TimeDelta :: seconds( 100 ) . as_seconds_f64( ) , 100.0 ) ;
806
+ assert_eq ! ( TimeDelta :: seconds( -100 ) . as_seconds_f64( ) , -100.0 ) ;
807
+
808
+ assert_eq ! ( TimeDelta :: milliseconds( 500 ) . as_seconds_f64( ) , 0.5 ) ;
809
+ assert_eq ! ( TimeDelta :: milliseconds( -500 ) . as_seconds_f64( ) , -0.5 ) ;
810
+ assert_eq ! ( TimeDelta :: milliseconds( 1_500 ) . as_seconds_f64( ) , 1.5 ) ;
811
+ assert_eq ! ( TimeDelta :: milliseconds( -1_500 ) . as_seconds_f64( ) , -1.5 ) ;
812
+ }
813
+
814
+ #[ test]
815
+ fn test_duration_as_seconds_f32 ( ) {
816
+ assert_eq ! ( TimeDelta :: seconds( 1 ) . as_seconds_f32( ) , 1.0 ) ;
817
+ assert_eq ! ( TimeDelta :: seconds( -1 ) . as_seconds_f32( ) , -1.0 ) ;
818
+ assert_eq ! ( TimeDelta :: seconds( 100 ) . as_seconds_f32( ) , 100.0 ) ;
819
+ assert_eq ! ( TimeDelta :: seconds( -100 ) . as_seconds_f32( ) , -100.0 ) ;
820
+
821
+ assert_eq ! ( TimeDelta :: milliseconds( 500 ) . as_seconds_f32( ) , 0.5 ) ;
822
+ assert_eq ! ( TimeDelta :: milliseconds( -500 ) . as_seconds_f32( ) , -0.5 ) ;
823
+ assert_eq ! ( TimeDelta :: milliseconds( 1_500 ) . as_seconds_f32( ) , 1.5 ) ;
824
+ assert_eq ! ( TimeDelta :: milliseconds( -1_500 ) . as_seconds_f32( ) , -1.5 ) ;
825
+ }
826
+
791
827
#[ test]
792
828
fn test_duration_subsec_nanos ( ) {
793
829
assert_eq ! ( TimeDelta :: zero( ) . subsec_nanos( ) , 0 ) ;
0 commit comments