BigDecimal
A wird durch zwei Werte definiert. Der Wert von BigDecimal
ist definiert als .
Präzision:
Die precision ist die Anzahl der Ziffern in dem unskalierten Wert. beispielsweise für die Nummer 123.45 kehrte die Präzision 5.
So Präzision die Länge der ganzen Zahl beliebiger Genauigkeit angibt. Hier sind ein paar Beispiele von Zahlen mit dem gleichen Maßstab, aber unterschiedliche Präzision:
- 12345/100000 = 0,12345 // scale = 5, Präzision = 5
- 12340/100000 = 0,1234 // scale = 5, Präzision = 4
- 1/100000 = 0,00001 // scale = 5, Präzision = 1
im speziellen Fall, dass die Anzahl auf Null gesetzt (dh 0,000) gleich ist, die Genauigkeit ist immer 1.
Maßstab:
Wenn null oder positiv, die scale ist die Anzahl der Ziffern rechts von dem Dezimalkomma. Wenn negativ, wird der unskalierte Wert der Zahl mit der Potenz der Negation der Skala multipliziert. Zum Beispiel bedeutet eine Skala von -3 der nicht skalierten Wert von 1000.
multipliziert wird, Dies bedeutet, dass der ganzzahlige Wert des ‚BigDecimal‘ von multipliziert wird.
Hier sind einige Beispiele für die gleiche Präzision, mit unterschiedlichen Maßstäben:
- 12345 mit Skala 5 = 0,12345
- 12345 mit Skala 4 = 1,2345
- ...
- 12345 mit Skala 0 = 12345
- 12345 mit Skala 1 = 123450 †
BigDecimal.toString:
Die toString
Verfahren für ein BigDecimal
verhält sich auf die Waage und precision
unterschiedlich basiert. (Dank @RudyVelthuis für den Hinweis.)
- Wenn
scale == 0
, die ganze Zahl wird nur ausgedruckt, wie sie ist.
- Wenn
scale < 0
, E-Notation immer verwendet wird (zB 5 Maßstab produziert -1 "5E + 1")
- Wenn
scale >= 0
und precision - scale -1 >= -6
eine einfache Dezimalzahl erzeugt wird (zB 10000000 Maßstab 1 erzeugt "1000000,0")
- Andernfalls wird E-Notation verwendet, z 10 Maßstab 8 erzeugt "1.0E-7", da
precision - scale -1
gleich kleiner als -6 ist.
Weitere Beispiele:
- 19/100 = 0,19 // integer = 19, scale = 2, Präzision = 2
- 1/1000 = 0,0001 // integer = 1, Zunder = 4, Genauigkeit = 1
Die Frage hat absolut nichts mit 'java.math.BigDecimal'. '@ javax.persistence.Column' ist nicht Teil von Java SE. Es ist das Thema von JPA. – Tiny
Präzision und Skalierung sind Begriffe, die oft für java.math.BigDecimal verwendet werden, was er für Berechnungen verwendet, zum Beispiel mit JPA. ISTM möchte er oder sie wissen, was sie im Zusammenhang mit BigDecimal meinen. –