Verhindern Sie, dass die Exponenten-Notation (E) angezeigt wird, wenn toString von Javas Big Decimal ausgeführt wird

Umgebung

Java 8 SpringBoot 1.5.10 Jackson Core 2.8.10

Phänomen

Wenn Sie "toString" aufrufen, während Sie den BigDecimal-Typ verwenden, wird möglicherweise die Exponentialnotation (E) angezeigt. Als ich es in meiner Umgebung ausprobierte, begann es bei 0,1 und blieb unverändert bei 0,1 bis 0,000001 (10 bis zur 6. Potenz), aber von 0,0000001 (10 bis zur 7. Potenz) erschien die Exponentialschreibweise (E).

BigDecimal fieldA = new BigDecimal("0.000001"); // .toString()Dann 0.000001
BigDecimal fieldB = new BigDecimal("0.0000001"); // .toString()Dann 1E-7

Dokument von BigDecimal.toString Einzelheiten entnehmen Sie bitte diesem.

Korrespondenz

Wenn Sie toPlainString anstelle von toString verwenden, wird es so wie es ist ausgespuckt.

BigDecimal fieldA = new BigDecimal("0.0000001"); 
System.out.println(fieldA.toString()); // -> 1E-7
System.out.println(fieldA.toPlainString()); // -> 0.0000001

Ich möchte PlainString verwenden, wenn ich Jackson verwende

Wenn Sie Jackson zum Konvertieren eines Java-Objekts in JSON verwenden, lautet das Standardverhalten toString, sodass für einige Zahlen die Exponentialschreibweise (E) angezeigt wird. Um dies zu verhindern, stellen Sie sicher, dass "toPlainString" anstelle von "toString" aufgerufen wird Einstellung von WRITE_BIGDECIMAL_AS_PLAIN. Es gibt .0 / com / schnellerxml / jackson / core / JsonGenerator.Feature.html # WRITE_BIGDECIMAL_AS_PLAIN). (Von Jackson 2.3)

Im Fall von Spring Boot ist es in Ordnung, wenn Sie die folgenden Einstellungen in application.yml schreiben.

spring:
  jackson:
    generator:
      write_bigdecimal_as_plain: true

Beiseite

Beachten Sie, dass wenn Sie jq verwenden, es in ein Format konvertiert wird, das Exponenten verwendet. Als ich den Vorgang überprüfte, rollte ich ihn vom Terminal aus, formatierte ihn mit jq und überprüfte ihn, sodass ich ein wenig süchtig danach war.

#e erscheint bei Verwendung von jq
$ curl localhost:8081 | jq
{
  "fieldA": 1e-53,
  "fieldB": 9e-15
}

#e wird nur angezeigt, wenn jq verwendet wird
$ curl localhost:8081     
{"fieldA":0.000001,"fieldB":0.0000001}

Recommended Posts

Verhindern Sie, dass die Exponenten-Notation (E) angezeigt wird, wenn toString von Javas Big Decimal ausgeführt wird
[Java] Tipps und Fehlerprobleme beim Konvertieren von Double zu Big Decimal
Java Big Decimal
[Java] Big Decimal richtig verwenden ~ 2018 ~