Re: Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- From: Jochen Theodorou <blackdrag@xxxxxx>
- Date: Sun, 18 Mar 2007 23:55:18 +0100
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/
.
- Follow-Ups:
- Re: Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- From: Peter Luschny
- Re: Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- References:
- Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- From: Chrisu @ Zerogiven
- Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- Prev by Date: Re: Buchtipp zu Java
- Next by Date: Re: Buchtipp zu Java
- Previous by thread: Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- Next by thread: Re: Bigdecimal Problem beim umwandeln von 1 Terra Meter in Piko Meter
- Index(es):
Relevant Pages
|