[blivet][PATCH] Use Decimal for math in Size.convertTo.

Anne Mulhern amulhern at redhat.com
Fri Sep 26 17:29:15 UTC 2014





----- Original Message -----
> From: "David Lehman" <dlehman at redhat.com>
> To: anaconda-patches at lists.fedorahosted.org
> Sent: Friday, September 26, 2014 12:56:02 PM
> Subject: [blivet][PATCH] Use Decimal for math in Size.convertTo.
> 
> Size.__div__ converts the Decimal result to a Size, which rounds its
> numerical argument (byte count) down to an integer. Size.convertTo is
> meant to retain precision.
> ---
>  blivet/size.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/blivet/size.py b/blivet/size.py
> index 4c23c11..f2a32ce 100644
> --- a/blivet/size.py
> +++ b/blivet/size.py
> @@ -269,7 +269,7 @@ class Size(Decimal):
>              check = _makeSpecs(prefix, abbr, False)
>  
>              if spec in check:
> -                return Decimal(self / Decimal(factor))
> +                return Decimal(Decimal(self) / Decimal(factor))
>  
>          return None
>  
> --
> 1.9.3
> 
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches
> 

Please add a differentiating test for this change.

Do you really need to cast the result? I would expect Decimal / Decimal to yield Decimal, always.

- mulhern

P.S.

Size.__div__ has been disturbing me for a while:

4 gallons / 2 gallons = 2 (because the units cancel)

but in our code

4 MiB / 2 MiB = 2 B (which is clearly wrong)

so the less we use it, the better.


More information about the anaconda-patches mailing list