Konvertieren von double zu lange Runde ohne Java

Ich versuche zu konvertieren, eine zufällige double zu lange ohne Rundung oder abschneiden.
Zunächst ändere ich den double in einen string, um zu wissen, wie viele Nachkommastellen es gibt und dann ändere ich den Wert auf lange.
Mein problem ist, dass die Zahl der in den letzten Dezimalstelle ist nicht immer richtig und ich weiß nicht, der Grund und wie kann ich es ändern.
Hier ist der code:

            double z=(double) myRandom(1, 20);
    long test;
    String s = Double.toString(z);
    test=(long) (Math.pow(10, s.length()-s.indexOf(".")-1)*z);
    System.out.println("z: "+z);    
    System.out.println("double converted to long: "+test);

- Und das ist die Ausgabe:

d: 19.625014811604743

double umgewandelt zu lange: 19625014811604744

d: 9.143326452202839

double umgewandelt zu lange: 9143326452202838

d: 5.8964228376511105

double umgewandelt zu lange: 58964228376511104

d: 15.045936360299917

double umgewandelt zu lange: 15045936360299918

d: 14.147950026532694

double umgewandelt zu lange: 14147950026532694

Du hast vergessen eine Frage zu stellen
Double.toString(double) nicht unbedingt Ausgabe, was man erwarten könnte von blind drucken jede Ziffer des gleichen double. Es hat einige Magie, um zu versuchen, um loszuwerden, funky wiederholen-stellige binärdarstellungen.
Floating-point-Rundungsfehler. Warum nimmst du nicht einfach den string, den Sie haben, ersetzen "." mit "", und dann analysieren, dass in einer long? Oder Sie gehen konnte, Doppel -> BigDecimal -> (mehrere BigDecimal durch den entsprechenden Faktor 10) -> BigInteger. Das funktioniert auch, wenn Sie Ihre code-änderungen zu erlauben, riesige Doppelzimmer.
Warum tun Sie kümmern sich um die Genauigkeit auf 16 stellen eine zufällige Zahl?
Yup, ich habe eine Antwort mit, dass vor ein paar Minuten. Ich wurde nur darauf hin, dass es gut von der OP nicht nur Schultern zucken und sagen "eh, gut genug" aber eigentlich Fragen, warum es passiert.

InformationsquelleAutor user2661808 | 2013-08-07

Schreibe einen Kommentar