#23935: DecimalField in admin can show up as Scientific Notation
------------------------------------+--------------------------------------
     Reporter:  xblitz              |                    Owner:  nobody
         Type:  Bug                 |                   Status:  new
    Component:  contrib.admin       |                  Version:  1.7
     Severity:  Normal              |               Resolution:
     Keywords:  DecimalField admin  |             Triage Stage:  Unreviewed
    Has patch:  1                   |      Needs documentation:  0
  Needs tests:  0                   |  Patch needs improvement:  0
Easy pickings:  1                   |                    UI/UX:  0
------------------------------------+--------------------------------------
Description changed by xblitz:

Old description:

> In the django admin, if a DecimalField's value is lower than 0.000001
> displays as Scientific Notation (ex: 1E-7) since python Decimals converts
> automatically to a scientific notation (exponential)  ex:
> Decimal("0.0000001") = Decimal('1E-7')
>
> this is mostly visible when using Postgresql since DecimalFields with a
> value of 0 are saved with the decimal precision higher than 6 , ex:
> 0.00000000 then in the admin instead of seeing 0 or 0.00000000 it is
> displayed as 0E-8
>
> the bug can be fixed by converting the Decimal to a fixed point value in
> admin/utils.py:
>

> {{{
> @@ -375,7 +375,7 @@ def display_for_field(value, field):
>      elif isinstance(field, (models.DateField, models.TimeField)):
>          return formats.localize(value)
>      elif isinstance(field, models.DecimalField):
> -        return formats.number_format(value, field.decimal_places)
> +        return formats.number_format(format(value, "f"),
> field.decimal_places)
>      elif isinstance(field, models.FloatField):
>          return formats.number_format(value)
>      else:
> }}}

New description:

 In the django admin, if a DecimalField's value is lower than 0.000001
 displays as Scientific Notation (ex: 1E-7) since python Decimals converts
 automatically to a scientific notation (exponential)  ex:
 Decimal("0.0000001") = Decimal('1E-7')

 this is mostly visible when using Postgresql since DecimalFields with a
 value of 0 are saved with the decimal precision higher than 6 , ex:
 0.00000000 then in the admin instead of seeing 0 or 0.00000000 it is
 displayed as 0E-8

 the bug can be fixed by converting the Decimal to a fixed point value in
 admin/utils.py:


 {{{
 @@ -375,7 +375,7 @@ def display_for_field(value, field):
      elif isinstance(field, (models.DateField, models.TimeField)):
          return formats.localize(value)
      elif isinstance(field, models.DecimalField):
 -        return formats.number_format(value, field.decimal_places)
 +        return formats.number_format(format(value, "f"),
 field.decimal_places)
      elif isinstance(field, models.FloatField):
          return formats.number_format(value)
      else:
 }}}

 link to my branch: https://github.com/xblitz/django/tree/ticket_23935

--

--
Ticket URL: <https://code.djangoproject.com/ticket/23935#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.c8c2172e456ea4f8d4c0b18cc9236130%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to