@@ -757,9 +757,11 @@ def test_format_quantity(self):
757757 "0.3Gi" )
758758
759759 # == base 1000 ==
760- self .assertEqual (quantity .format_quantity (Decimal (0.000_000_001 ), "n" ), "1n" )
761- self .assertEqual (quantity .format_quantity (Decimal (0.000_001 ), "u" ), "1u" )
762- self .assertEqual (quantity .format_quantity (Decimal (0.001 ), "m" ), "1m" )
760+ # Exact Decimals: float-derived Decimals (e.g. Decimal(0.001)) carry binary
761+ # rounding error that the precise scaling surfaces into the output.
762+ self .assertEqual (quantity .format_quantity (Decimal ("0.000000001" ), "n" ), "1n" )
763+ self .assertEqual (quantity .format_quantity (Decimal ("0.000001" ), "u" ), "1u" )
764+ self .assertEqual (quantity .format_quantity (Decimal ("0.001" ), "m" ), "1m" )
763765 self .assertEqual (quantity .format_quantity (Decimal (1_000 ), "k" ), "1k" )
764766 self .assertEqual (quantity .format_quantity (Decimal (1_000_000 ), "M" ), "1M" )
765767 self .assertEqual (quantity .format_quantity (Decimal (1_000_000_000 ), "G" ), "1G" )
@@ -781,3 +783,19 @@ def test_format_quantity(self):
781783 ),
782784 "333k" ,
783785 )
786+
787+ # == milli/micro/nano keep full precision in canonical decimal form ==
788+ # Regression: these divided by a float-built Decimal and rendered in
789+ # scientific notation (e.g. "499.9999999999999895916591441m", "1E+9").
790+ self .assertEqual (quantity .format_quantity (Decimal ("0.5" ), "m" ), "500m" )
791+ self .assertEqual (quantity .format_quantity (Decimal ("0.5" ), "u" ), "500000u" )
792+ self .assertEqual (quantity .format_quantity (Decimal ("0.5" ), "n" ), "500000000n" )
793+ self .assertEqual (quantity .format_quantity (Decimal ("1" ), "m" ), "1000m" )
794+ self .assertEqual (quantity .format_quantity (Decimal ("1" ), "n" ), "1000000000n" )
795+
796+ # == quantize=Decimal(0) is honored, not treated as falsy ==
797+ self .assertEqual (quantity .format_quantity (Decimal ("0.5006" ), "m" ), "500.6m" )
798+ self .assertEqual (
799+ quantity .format_quantity (Decimal ("0.5006" ), "m" , quantize = Decimal (0 )),
800+ "501m" ,
801+ )
0 commit comments