Re: Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter



Chrisu @ Zerogiven schrieb:
Hallo an alle :-)

Bin relativ neu in Java, hab mich jedoch die letzten 3 Wochen sehr
intensiv damit beschäftigt.
Mein Problem ist das ich eine GUI Applikation machen möchte die Zahl
in diversen Einheiten umrechnet. Mitunter soll ein System dabei sein
das die Werte von Tera - Piko anzeigen soll (für Informationen:
http://de.wikipedia.org/wiki/Meter)

Funktioniert auch soweit. Ich verwende die JScience Bibliothek (API:
http://jscience.org/api/index.html) zum konvertieren der Werte. Als
Rückgabe bekomme ich einen Double Wert, den ich in einen BigDecimal
wandle (zum Anzeigen größeren Zahlenbereiche)
Das ganze gebe ich dann in einem jTextField aus.
Hier einmal der Code dazu
++++++++++++++++++++++++++++
unitFrom<Length> = SI.TERA(unitMeter);
unitTo<Length> = SI.PICO(unitMeter);
conv = unitFrom.getConverterTo(unitTo);
jPiko_Field.setText(String.valueOf(new BigDecimal(conv.convert(1))));
++++++++++++++++++++++++++++
So nun zum Problem dem im Textfeld kommt das raus:
999999999999999983222784

das liegt nicht am BigDecimal, das liegt am double. double is eine Zahl mit eingeschränkter Genauigkeit und bei so vielen Stellen wirkt sich das aus.

Auf Nano Meter bekomme ich noch ein richtiges Ergebeniss (1 Terra
Meter =
1000000000000000000000 Nano Meter)

Zum "Debuggen" gebe ich mir die Werte noch als double aus, und hier
stimmen die Ergebnisse (1 Terra = ):
Zenti: 1.0E14
Milli: 1.0E15
Mikro: 1.0E18
Nano: 1.0E21
Piko: 1.0E24

Natürlich kann ich als alternative den double Wert anzeigen, aber ich
wollte es "Userfreundlicher" und als ganze Zahl (also
1000000000000000000000000)

1.0E24 ist ein gerundeter Wert, deswegen sieht es richtig aus. Achja... Userfreundlicher finde ich eine 1 mit so vielen Nullen nicht. Denn was bringen einem so viele Nullen? Man muss sie zählen um zu wissen welcher Zahl da steht, ansonsten sieht man nur eine grosse Zahl.

Achja, nochwas. Es wird empfohlen einen string zu benutzen um eine BigDecimal Zahl zu erstellen, weil eben die Umwandlung in einen double zum Verlust von Genauigkeit führen kann. Aber das wäre nur bei der Eingabe oder verleichbarem relevant.

Gruss theo

--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
.



Relevant Pages

  • Re: Dezimalstellen auf 2 begrenzen?
    ... Was ist der Unterschied zwischen Decimal und Double? ... Datentyp "Decimal" stellt Dezimalzahlen dar, d.h. eine dezimale 0,1 ist auch ... > ob die Zahl nur 2 Nachkommastellen hat? ... Definiere mal, was 2 Nachkommastellen sind. ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • Re: Prozessor rechnet falsch
    ... der Zahlenraum der Floats ist eine ... Wenn man eine Zahl nicht exakt durch einen double darstellen ...
    (microsoft.public.de.vc)
  • Re: Decimal und DoCmd.FindRecord
    ... Double ist anscheinend zu ungenau. ... Dann formattiere halt die Zahl mit der Format Funktion, bevor Du suchst, ... Nach dem Formattieren ist die Zahl keine Zahl ... Keine Mails auf Postings in NGs senden! ...
    (microsoft.public.de.access.clientserver)
  • Re: Prozessor rechnet falsch
    ... Mach mal nen Chart mit Millionen daten in double, ... der Zahlenraum der Floats ist eine ... Wenn man eine Zahl nicht exakt durch einen double darstellen ...
    (microsoft.public.de.vc)
  • Re: Wenigstens =?ISO-8859-15?Q?hier=FCberk=F6nnen?= (metaphysical constraints)
    ... Die Indizes der Nullen. ... darunter stehenden Zahlen indizieren läßt. ... Zahl dar. ... Endliche Zahlen füllen keine unendliche Menge. ...
    (de.sci.mathematik)