@@ -393,41 +393,6 @@ function roundFloor(x: SignedSignificandExponent): SignedSignificandExponent {
393
393
} ;
394
394
}
395
395
396
- function roundExpand ( x : SignedSignificandExponent ) : SignedSignificandExponent {
397
- let sig = x . significand . toString ( ) ;
398
- let lastDigit = parseInt ( sig . charAt ( MAX_SIGNIFICANT_DIGITS ) ) as Digit ;
399
- let cutoff = cutoffAfterSignificantDigits ( sig , MAX_SIGNIFICANT_DIGITS - 1 ) ;
400
- let penultimateDigit = parseInt (
401
- sig . charAt ( MAX_SIGNIFICANT_DIGITS - 1 )
402
- ) as Digit ;
403
- let excessDigits = sig . substring ( MAX_SIGNIFICANT_DIGITS ) ;
404
- let numExcessDigits = excessDigits . length ;
405
- let exp = x . exponent + numExcessDigits ; // we will chop off the excess digits
406
-
407
- let finalDigit = roundIt (
408
- x . isNegative ,
409
- penultimateDigit ,
410
- lastDigit ,
411
- ROUNDING_MODE_EXPAND
412
- ) ;
413
-
414
- if ( finalDigit < 10 ) {
415
- return {
416
- isNegative : x . isNegative ,
417
- significand : BigInt ( `${ cutoff } ${ finalDigit } ` ) ,
418
- exponent : exp ,
419
- } ;
420
- }
421
-
422
- let rounded = propagateCarryFromRight ( cutoff ) ;
423
-
424
- return {
425
- isNegative : x . isNegative ,
426
- significand : BigInt ( `${ rounded } 0` ) ,
427
- exponent : exp ,
428
- } ;
429
- }
430
-
431
396
function roundTrunc ( x : SignedSignificandExponent ) : SignedSignificandExponent {
432
397
let sig = x . significand . toString ( ) ;
433
398
let lastDigit = parseInt ( sig . charAt ( MAX_SIGNIFICANT_DIGITS ) ) as Digit ;
@@ -453,43 +418,6 @@ function roundTrunc(x: SignedSignificandExponent): SignedSignificandExponent {
453
418
} ;
454
419
}
455
420
456
- function roundHalfExpand (
457
- x : SignedSignificandExponent
458
- ) : SignedSignificandExponent {
459
- let sig = x . significand . toString ( ) ;
460
- let lastDigit = parseInt ( sig . charAt ( MAX_SIGNIFICANT_DIGITS ) ) as Digit ;
461
- let cutoff = cutoffAfterSignificantDigits ( sig , MAX_SIGNIFICANT_DIGITS - 1 ) ;
462
- let penultimateDigit = parseInt (
463
- sig . charAt ( MAX_SIGNIFICANT_DIGITS - 1 )
464
- ) as Digit ;
465
- let excessDigits = sig . substring ( MAX_SIGNIFICANT_DIGITS ) ;
466
- let numExcessDigits = excessDigits . length ;
467
- let exp = x . exponent + numExcessDigits ; // we will chop off the excess digits
468
-
469
- let finalDigit = roundIt (
470
- x . isNegative ,
471
- penultimateDigit ,
472
- lastDigit ,
473
- ROUNDING_MODE_HALF_EXPAND
474
- ) ;
475
-
476
- if ( finalDigit < 10 ) {
477
- return {
478
- isNegative : x . isNegative ,
479
- significand : BigInt ( `${ cutoff } ${ finalDigit } ` ) ,
480
- exponent : exp ,
481
- } ;
482
- }
483
-
484
- let rounded = propagateCarryFromRight ( cutoff ) ;
485
-
486
- return {
487
- isNegative : x . isNegative ,
488
- significand : BigInt ( `${ rounded } 0` ) ,
489
- exponent : exp ,
490
- } ;
491
- }
492
-
493
421
function roundHalfCeil (
494
422
x : SignedSignificandExponent
495
423
) : SignedSignificandExponent {
@@ -517,70 +445,6 @@ function roundHalfCeil(
517
445
} ;
518
446
}
519
447
520
- function roundHalfFloor (
521
- x : SignedSignificandExponent
522
- ) : SignedSignificandExponent {
523
- let sig = x . significand . toString ( ) ;
524
- let lastDigit = parseInt ( sig . charAt ( MAX_SIGNIFICANT_DIGITS ) ) as Digit ;
525
- let cutoff = cutoffAfterSignificantDigits ( sig , MAX_SIGNIFICANT_DIGITS - 1 ) ;
526
- let penultimateDigit = parseInt (
527
- sig . charAt ( MAX_SIGNIFICANT_DIGITS - 1 )
528
- ) as Digit ;
529
- let excessDigits = sig . substring ( MAX_SIGNIFICANT_DIGITS ) ;
530
- let numExcessDigits = excessDigits . length ;
531
- let exp = x . exponent + numExcessDigits ; // we will chop off the excess digits
532
-
533
- let finalDigit = roundIt (
534
- x . isNegative ,
535
- penultimateDigit ,
536
- lastDigit ,
537
- ROUNDING_MODE_HALF_FLOOR
538
- ) ;
539
-
540
- if ( finalDigit < 10 ) {
541
- return {
542
- isNegative : x . isNegative ,
543
- significand : BigInt ( `${ cutoff } ${ finalDigit } ` ) ,
544
- exponent : exp ,
545
- } ;
546
- }
547
-
548
- let rounded = propagateCarryFromRight ( cutoff ) ;
549
-
550
- return {
551
- isNegative : x . isNegative ,
552
- significand : BigInt ( `${ rounded } 0` ) ,
553
- exponent : exp ,
554
- } ;
555
- }
556
-
557
- function roundHalfTrunc (
558
- x : SignedSignificandExponent
559
- ) : SignedSignificandExponent {
560
- let sig = x . significand . toString ( ) ;
561
- let lastDigit = parseInt ( sig . charAt ( MAX_SIGNIFICANT_DIGITS ) ) as Digit ;
562
- let cutoff = cutoffAfterSignificantDigits ( sig , MAX_SIGNIFICANT_DIGITS - 1 ) ;
563
- let penultimateDigit = parseInt (
564
- sig . charAt ( MAX_SIGNIFICANT_DIGITS - 1 )
565
- ) as Digit ;
566
- let excessDigits = sig . substring ( MAX_SIGNIFICANT_DIGITS ) ;
567
- let numExcessDigits = excessDigits . length ;
568
- let exp = x . exponent + numExcessDigits ; // we will chop off the excess digits
569
-
570
- let finalDigit = roundIt (
571
- x . isNegative ,
572
- penultimateDigit ,
573
- lastDigit ,
574
- ROUNDING_MODE_HALF_TRUNCATE
575
- ) ;
576
-
577
- return {
578
- isNegative : x . isNegative ,
579
- significand : BigInt ( `${ cutoff } ${ finalDigit } ` ) ,
580
- exponent : exp ,
581
- } ;
582
- }
583
-
584
448
function adjustNonInteger (
585
449
x : SignedSignificandExponent ,
586
450
options : FullySpecifiedConstructorOptions
@@ -592,18 +456,10 @@ function adjustNonInteger(
592
456
return roundCeiling ( x ) ;
593
457
case ROUNDING_MODE_FLOOR :
594
458
return roundFloor ( x ) ;
595
- case ROUNDING_MODE_EXPAND :
596
- return roundExpand ( x ) ;
597
459
case ROUNDING_MODE_TRUNCATE :
598
460
return roundTrunc ( x ) ;
599
- case ROUNDING_MODE_HALF_EXPAND :
600
- return roundHalfExpand ( x ) ;
601
461
case ROUNDING_MODE_HALF_CEILING :
602
462
return roundHalfCeil ( x ) ;
603
- case ROUNDING_MODE_HALF_FLOOR :
604
- return roundHalfFloor ( x ) ;
605
- case ROUNDING_MODE_HALF_TRUNCATE :
606
- return roundHalfTrunc ( x ) ;
607
463
default :
608
464
return roundHalfEven ( x ) ;
609
465
}
@@ -718,13 +574,9 @@ function handleInfinity(s: string): Decimal128Constructor {
718
574
719
575
export const ROUNDING_MODE_CEILING : RoundingMode = "ceil" ;
720
576
export const ROUNDING_MODE_FLOOR : RoundingMode = "floor" ;
721
- export const ROUNDING_MODE_EXPAND : RoundingMode = "expand" ;
722
577
export const ROUNDING_MODE_TRUNCATE : RoundingMode = "trunc" ;
723
578
export const ROUNDING_MODE_HALF_EVEN : RoundingMode = "halfEven" ;
724
- export const ROUNDING_MODE_HALF_EXPAND : RoundingMode = "halfExpand" ;
725
579
export const ROUNDING_MODE_HALF_CEILING : RoundingMode = "halfCeil" ;
726
- export const ROUNDING_MODE_HALF_FLOOR : RoundingMode = "halfFloor" ;
727
- export const ROUNDING_MODE_HALF_TRUNCATE : RoundingMode = "halfTrunc" ;
728
580
729
581
const ROUNDING_MODE_DEFAULT = ROUNDING_MODE_HALF_EVEN ;
730
582
const CONSTRUCTOR_SHOULD_NORMALIZE = false ;
@@ -756,8 +608,6 @@ function roundIt(
756
608
}
757
609
758
610
return digitToRound ;
759
- case ROUNDING_MODE_EXPAND :
760
- return ( digitToRound + 1 ) as DigitOrTen ;
761
611
case ROUNDING_MODE_TRUNCATE :
762
612
return digitToRound ;
763
613
case ROUNDING_MODE_HALF_CEILING :
@@ -769,36 +619,6 @@ function roundIt(
769
619
return ( digitToRound + 1 ) as DigitOrTen ;
770
620
}
771
621
772
- return digitToRound ;
773
- case ROUNDING_MODE_HALF_FLOOR :
774
- if ( decidingDigit === 5 ) {
775
- if ( isNegative ) {
776
- return ( digitToRound + 1 ) as DigitOrTen ;
777
- }
778
-
779
- return digitToRound ;
780
- }
781
-
782
- if ( decidingDigit > 5 ) {
783
- return ( digitToRound + 1 ) as DigitOrTen ;
784
- }
785
-
786
- return digitToRound ;
787
- case ROUNDING_MODE_HALF_TRUNCATE :
788
- if ( decidingDigit === 5 ) {
789
- return digitToRound ;
790
- }
791
-
792
- if ( decidingDigit > 5 ) {
793
- return ( digitToRound + 1 ) as DigitOrTen ;
794
- }
795
-
796
- return digitToRound ;
797
- case ROUNDING_MODE_HALF_EXPAND :
798
- if ( decidingDigit >= 5 ) {
799
- return ( digitToRound + 1 ) as DigitOrTen ;
800
- }
801
-
802
622
return digitToRound ;
803
623
default : // ROUNDING_MODE_HALF_EVEN:
804
624
if ( decidingDigit === 5 ) {
@@ -817,27 +637,14 @@ function roundIt(
817
637
}
818
638
}
819
639
820
- type RoundingMode =
821
- | "ceil"
822
- | "floor"
823
- | "expand"
824
- | "trunc"
825
- | "halfEven"
826
- | "halfExpand"
827
- | "halfCeil"
828
- | "halfFloor"
829
- | "halfTrunc" ;
640
+ type RoundingMode = "ceil" | "floor" | "trunc" | "halfEven" | "halfCeil" ;
830
641
831
642
const ROUNDING_MODES : RoundingMode [ ] = [
832
643
"ceil" ,
833
644
"floor" ,
834
- "expand" ,
835
645
"trunc" ,
836
646
"halfEven" ,
837
- "halfExpand" ,
838
647
"halfCeil" ,
839
- "halfFloor" ,
840
- "halfTrunc" ,
841
648
] ;
842
649
843
650
const digitStrRegExp =
0 commit comments