@@ -47,7 +47,7 @@ impl DecimalNumber {
47
47
}
48
48
49
49
#[ inline]
50
- pub fn get_raw_float ( & self ) -> f64 {
50
+ pub ( crate ) fn get_raw_float ( & self ) -> f64 {
51
51
self . float
52
52
}
53
53
@@ -62,11 +62,7 @@ impl DecimalNumber {
62
62
}
63
63
64
64
pub fn compute_value ( & self ) -> f64 {
65
- if let Some ( ( exponent, _) ) = self . exponent {
66
- self . float * 10_f64 . powf ( exponent as f64 )
67
- } else {
68
- self . float
69
- }
65
+ self . float
70
66
}
71
67
72
68
super :: impl_token_fns!( iter = [ token] ) ;
@@ -406,13 +402,18 @@ impl FromStr for NumberExpression {
406
402
. map ( filter_underscore)
407
403
. and_then ( |string| string. parse ( ) . ok ( ) )
408
404
. ok_or ( Self :: Err :: InvalidDecimalExponent ) ?;
409
- let number = value
405
+ let _number : f64 = value
410
406
. get ( 0 ..index)
411
407
. map ( filter_underscore)
412
408
. and_then ( |string| string. parse ( ) . ok ( ) )
413
409
. ok_or ( Self :: Err :: InvalidDecimalNumber ) ?;
414
410
415
- DecimalNumber :: new ( number) . with_exponent ( exponent, exponent_is_uppercase)
411
+ DecimalNumber :: new (
412
+ filter_underscore ( value)
413
+ . parse :: < f64 > ( )
414
+ . map_err ( |_| Self :: Err :: InvalidDecimalNumber ) ?,
415
+ )
416
+ . with_exponent ( exponent, exponent_is_uppercase)
416
417
} else {
417
418
let number = filter_underscore ( value)
418
419
. parse :: < f64 > ( )
@@ -528,16 +529,17 @@ mod test {
528
529
parse_multiple_decimal_with_underscore_after_point( "0._24" ) => DecimalNumber :: new( 0.24_f64 ) ,
529
530
parse_float_with_trailing_dot( "123." ) => DecimalNumber :: new( 123_f64 ) ,
530
531
parse_starting_with_dot( ".123" ) => DecimalNumber :: new( 0.123_f64 ) ,
531
- parse_digit_with_exponent( "1e10" ) => DecimalNumber :: new( 1_f64 ) . with_exponent( 10 , false ) ,
532
- parse_digit_with_exponent_and_underscore( "1e_10" ) => DecimalNumber :: new( 1_f64 ) . with_exponent( 10 , false ) ,
533
- parse_number_with_exponent( "123e456" ) => DecimalNumber :: new( 123_f64 ) . with_exponent( 456 , false ) ,
534
- parse_number_with_exponent_and_plus_symbol( "123e+456" ) => DecimalNumber :: new( 123_f64 ) . with_exponent( 456 , false ) ,
535
- parse_number_with_negative_exponent( "123e-456" ) => DecimalNumber :: new( 123_f64 ) . with_exponent( -456 , false ) ,
536
- parse_number_with_upper_exponent( "123E4" ) => DecimalNumber :: new( 123_f64 ) . with_exponent( 4 , true ) ,
537
- parse_number_with_upper_negative_exponent( "123E-456" ) => DecimalNumber :: new( 123_f64 ) . with_exponent( -456 , true ) ,
538
- parse_float_with_exponent( "10.12e8" ) => DecimalNumber :: new( 10.12_f64 ) . with_exponent( 8 , false ) ,
539
- parse_float_with_exponent_and_underscores( "10_0.12_e_8" ) => DecimalNumber :: new( 100.12_f64 ) . with_exponent( 8 , false ) ,
540
- parse_trailing_dot_with_exponent( "10.e8" ) => DecimalNumber :: new( 10_f64 ) . with_exponent( 8 , false ) ,
532
+ parse_digit_with_exponent( "1e10" ) => DecimalNumber :: new( 1e10_f64 ) . with_exponent( 10 , false ) ,
533
+ parse_digit_with_exponent_and_underscore( "1e_10" ) => DecimalNumber :: new( 1e10_f64 ) . with_exponent( 10 , false ) ,
534
+ parse_number_with_exponent( "123e101" ) => DecimalNumber :: new( 123e101_f64 ) . with_exponent( 101 , false ) ,
535
+ parse_number_with_exponent_and_plus_symbol( "123e+121" ) => DecimalNumber :: new( 123e121_f64 ) . with_exponent( 121 , false ) ,
536
+ parse_number_with_negative_exponent( "123e-456" ) => DecimalNumber :: new( 123e-456_f64 ) . with_exponent( -456 , false ) ,
537
+ parse_number_with_upper_exponent( "123E4" ) => DecimalNumber :: new( 123e4_f64 ) . with_exponent( 4 , true ) ,
538
+ parse_number_with_upper_negative_exponent( "123E-456" ) => DecimalNumber :: new( 123e-456_f64 ) . with_exponent( -456 , true ) ,
539
+ parse_float_with_exponent( "10.12e8" ) => DecimalNumber :: new( 10.12e8_f64 ) . with_exponent( 8 , false ) ,
540
+ parse_float_with_exponent_and_underscores( "10_0.12_e_8" ) => DecimalNumber :: new( 100.12e8_f64 ) . with_exponent( 8 , false ) ,
541
+ parse_float_with_exponent_2( "4.6982573308436185e159" ) => DecimalNumber :: new( 4.6982573308436185e159_f64 ) . with_exponent( 159 , false ) ,
542
+ parse_trailing_dot_with_exponent( "10.e8" ) => DecimalNumber :: new( 10e8_f64 ) . with_exponent( 8 , false ) ,
541
543
parse_hex_number( "0x12" ) => HexNumber :: new( 18 , false ) ,
542
544
parse_hex_number_with_underscore_before_x( "0_x12" ) => HexNumber :: new( 18 , false ) ,
543
545
parse_hex_number_with_underscores_around_x( "0_x_12" ) => HexNumber :: new( 18 , false ) ,
0 commit comments