pre-commit / pre-commit/pre-commit-hooks

`pretty-format-json` modifies floating point numbers that have too many digits of precision

Ouverte
#780 5 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
6.7k
Forks
800
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

pretty-format-json modifies floating point numbers that have too many digits of precision.

Background

I have to work with JSON files that may be generated by non-python programs. These files, for whatever reason, have numbers that have up to 16 digits after the decimal place.

(It's absurd, really. The people taking these measurements are somehow able to measure 0.1μHz on a 10GHz scale?? Yeah, they're saving values like 5.9257052820783001 GHz. Someone needs to teach them about significant figures... but that's beside the point. The point is I have to deal with this data 😒)

Steps to Reproduce
  1. Create the following json file:
    {"foo": 4.4257052820783003}
    
  2. Run pretty-format-json on it.
Expected Output:
{
  "foo": 4.4257052820783003
}
Actual Output:
{
  "foo": 4.4257052820783
}

The diff from expected is:

 {
-  "foo": 4.4257052820783003
+  "foo": 4.4257052820783
 }
Version Info
  • pre-commit: 2.19.0
  • pre-commit-hooks: v4.2.0
  • Python: 3.8.8
  • OS: Debian 11
Discussion

This might be something that has to be fixed within the python builtin json package. A custom JSON encoder/decoder that wraps things using decimal.Decimal might work too.

I've created a test case for this. See my high-precision-numbers branch or the diff.

I'll see if I have time to actually fix this, but I don't expect to ☹️.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Start by reproducing the issue with the pretty-format-json hook and inspect the high-precision-numbers branch and linked diff for its existing test case. Done means the hook preserves the input value 4.4257052820783003 in formatted output without losing decimal digits, with the regression test passing.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
tooling
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.