Page 1 of 1
Java - Double precision
Posted: Tue May 17, 2005 1:45 pm
by semika
Έστω οτι έχουμε έναν Double a = new Double(0.123456789); και θέλουμε να κρατήσουμε τα 5 πρώτα ψηφία.
δηλ a.doubleValue() να επιστέφει : 0.12345
Γίνεται κάτι τέτοιο με Java 1.4.2??
Ευχαριστώ!!

Posted: Tue May 17, 2005 2:34 pm
by AmmarkoV
Μια πολύ γύφτικη μέθοδος είναι η εξής..
0.123456789 * 100000 = 12345.6789
Μετα κάνουμε το 12345.6789 long οπότε ξεφορωνόμαστε το 0.6789
και στην συνέχεια το μετατρέπουμε ξανά σε double και διαιρούμε δια 10000 οπότε μας μένει 0.12345
public static double doubleK5dekadika(double arithmos1)
{ double resultdkd;
resultdkd=((double)((long)(arithmos1*100000)))/100000;
return resultdkd;
}
Επαναλαμβάνω είναι πολύ γύφτικος τρόπος (Γνωστή και ως η Java του δρόμου

), προφανώς θα υπάρχει κάτι κομψότερο έτοιμο αλλά επειδή βαριόμουν να ψάξω..
Το παραπάνω δέχεται ως είσοδο έναν double που θα του δώσεις και τον επιστρέφει κομμένο έως 5 δεκαδικά..
Posted: Tue May 17, 2005 3:29 pm
by yioan
Έψαχνα κάτι έτοιμο και δε βρήκα. Αυτό που είπε ο Amarkov με στρογγυλοποίηση:
Math.round(d*100000)/100000D.
Πάντως η ακρίβεια στους Double στην Java(και φαντάζομαι σε οποιαδήποτε άλλη γλώσσα) είναι το κάτι άλλο.
Δοκιμάστε αυτό:
class test {
public static void main(String args[]) {
double a = 1.2;
double b = 1.1;
System.out.println(a - b);
}
}
Το αποτέλεσμα είναι 0.09999999999999987.
Re: Java - Double precision
Posted: Tue May 17, 2005 4:56 pm
by Einherjar
Code: Select all
String.format("%.5f",str); //όπου str το string που περιέχει τον αριθμό
Το παραπάνω επιστρέφει ένα νέο string με τα επιθυμητά ψηφία
Posted: Tue May 17, 2005 6:28 pm
by HdkiLLeR
To output formating της C παραμονεύει παντού ε;

Posted: Tue May 17, 2005 7:24 pm
by semika