Java 8 SpringBoot 1.5.10 Jackson Core 2.8.10
Si vous appelez toString
en utilisant le type BigDecimal, la notation exponentielle (E) peut apparaître.
Quand je l'ai essayé dans mon environnement, il est parti de 0,1 et est resté tel quel de 0,1 à 0,000001 (10 à la 6e puissance), mais à partir de 0,0000001 (10 à la 7e puissance), la notation exponentielle (E) est apparue.
BigDecimal fieldA = new BigDecimal("0.000001"); // .toString()Puis 0.000001
BigDecimal fieldB = new BigDecimal("0.0000001"); // .toString()Puis 1E-7
Pour connaître les critères d'affichage de la notation exponentielle (E), consultez BigDecimal.toString Document Pour plus de détails, veuillez vous y référer.
Si vous utilisez toPlainString au lieu de toString, il crachera tel quel.
BigDecimal fieldA = new BigDecimal("0.0000001");
System.out.println(fieldA.toString()); // -> 1E-7
System.out.println(fieldA.toPlainString()); // -> 0.0000001
Si vous utilisez Jackson pour convertir un objet Java en JSON, le comportement par défaut est toString, donc la notation exponentielle (E) apparaîtra pour certains nombres.
Pour éviter cela, assurez-vous que toPlainString
est appelé à la place de toString
Réglage WRITE_BIGDECIMAL_AS_PLAIN Il existe .0 / com / plus rapidexml / jackson / core / JsonGenerator.Feature.html # WRITE_BIGDECIMAL_AS_PLAIN). (D'après Jackson 2.3)
Dans le cas de Spring Boot, ce n'est pas grave si vous écrivez les paramètres suivants dans ʻapplication.yml`.
spring:
jackson:
generator:
write_bigdecimal_as_plain: true
Notez que si vous utilisez jq, il sera converti dans un format utilisant des exposants. Quand j'ai vérifié l'opération, je l'ai recourbée depuis le terminal, je l'ai formatée avec jq et je l'ai vérifiée, donc j'étais un peu accro.
#e apparaît lors de l'utilisation de jq
$ curl localhost:8081 | jq
{
"fieldA": 1e-53,
"fieldB": 9e-15
}
#e n'apparaît que si jq est utilisé
$ curl localhost:8081
{"fieldA":0.000001,"fieldB":0.0000001}