2012-05-18 11 views
13

Ich habe gelesen BigDecimal Class, aber ich konnte keine Informationen finden, wie BigDecimal Klasse speichert Werte im Computerspeicher.Wie ist BigDecimal implementiert?

Kennen Sie eine zuverlässige Quelle, die diese Informationen bereitstellen kann?

+9

Java ist Open Source. Ich fange an, einfach in [Quellcode] zu schauen (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/math/BigDecimal.java/) . – BalusC

+2

OK, aber ich bin nicht so gut in Java, um zu lernen, wie es aus einem Quellcode funktioniert. –

+2

Das Lesen der Quelle ist eine Möglichkeit, bei Java besser zu werden. – trashgod

Antwort

5

Die signifikanten Ziffern der Nummer werden in einem langen gespeichert, wenn die Anzahl der Ziffern ausreicht, um in eine lange passen, andernfalls werden sie in einem BigInteger gespeichert. Darüber hinaus hat BigDecimal int-Primitive zur Darstellung der scale and precision, einer Skala, die die Anzahl der signifikanten Stellen rechts des Dezimalpunkts angibt, und einer Genauigkeit, die die Anzahl der signifikanten Ziffern insgesamt in der Zahl angibt.

14

Der unskalierte Wert BigDecimal ist in einem gespeichert. Die precision and scale werden separat in Integer-Felder gespeichert:

BigInteger intVal 
int scale 
int precision 

BigInteger speichert die ganze Zahl als big-endian Anordnung von 32-Bit-Zahlen und das Vorzeichen separat als eine weitere 32-Bit-Ganzzahl.

int signum 
int[] mag 

Aber wie Muhd ​​sagt, wenn die Zahl in einer 64-Bit-Integer passen, dann wird diese anstelle eines BigInteger verwendet.