File tree 2 files changed +25
-2
lines changed 2 files changed +25
-2
lines changed Original file line number Diff line number Diff line change 289
289
assert float ('nan' ).__ne__ (float ('nan' )) is True
290
290
assert float ('nan' ).__eq__ (float ('inf' )) is False
291
291
assert float ('nan' ).__ne__ (float ('inf' )) is True
292
+
293
+ assert float (1e15 ).__repr__ () == "1000000000000000.0"
294
+ assert float (1e16 ).__repr__ () == "1e+16"
295
+ assert float (1e308 ).__repr__ () == "1e+308"
296
+ assert float (1e309 ).__repr__ () == "inf"
297
+ assert float (1e-323 ).__repr__ () == "1e-323"
298
+ assert float (1e-324 ).__repr__ () == "0.0"
299
+ assert float (1e-5 ).__repr__ () == "1e-05"
300
+ assert float (1e-4 ).__repr__ () == "0.0001"
301
+ assert float (1.2345678901234567890 ).__repr__ () == "1.2345678901234567"
302
+ assert float (1.2345678901234567890e308 ).__repr__ () == "1.2345678901234567e+308"
Original file line number Diff line number Diff line change @@ -416,8 +416,20 @@ impl PyFloat {
416
416
417
417
#[ pymethod( name = "__repr__" ) ]
418
418
fn repr ( & self , vm : & VirtualMachine ) -> String {
419
- if self . is_integer ( vm) {
420
- format ! ( "{:.1?}" , self . value)
419
+ let value = format ! ( "{:e}" , self . value) ;
420
+ if let Some ( position) = value. find ( 'e' ) {
421
+ let significand = & value[ ..position] ;
422
+ let exponent = & value[ position + 1 ..] ;
423
+ let exponent = exponent. parse :: < i32 > ( ) . unwrap ( ) ;
424
+ if exponent < 16 && exponent > -5 {
425
+ if self . is_integer ( vm) {
426
+ format ! ( "{:.1?}" , self . value)
427
+ } else {
428
+ self . value . to_string ( )
429
+ }
430
+ } else {
431
+ format ! ( "{}e{:+#03}" , significand, exponent)
432
+ }
421
433
} else {
422
434
self . value . to_string ( )
423
435
}
You can’t perform that action at this time.
0 commit comments