Java - Double precision

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
semika
Mbyte level
Mbyte level
Posts: 998
Joined: Sat May 01, 2004 2:21 pm
Location: Αθήνα - Β.Π.

Java - Double precision

Post by semika » Tue May 17, 2005 1:45 pm

Έστω οτι έχουμε έναν Double a = new Double(0.123456789); και θέλουμε να κρατήσουμε τα 5 πρώτα ψηφία.
δηλ a.doubleValue() να επιστέφει : 0.12345
Γίνεται κάτι τέτοιο με Java 1.4.2??

Ευχαριστώ!!
:smt100 :smt100 :smt100
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Post by AmmarkoV » Tue May 17, 2005 2:34 pm

Μια πολύ γύφτικη μέθοδος είναι η εξής..
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 του δρόμου :lol: ), προφανώς θα υπάρχει κάτι κομψότερο έτοιμο αλλά επειδή βαριόμουν να ψάξω.. :-D
Το παραπάνω δέχεται ως είσοδο έναν double που θα του δώσεις και τον επιστρέφει κομμένο έως 5 δεκαδικά..
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
yioan
byte level
byte level
Posts: 126
Joined: Wed Mar 24, 2004 11:09 pm

Post by yioan » Tue May 17, 2005 3:29 pm

Έψαχνα κάτι έτοιμο και δε βρήκα. Αυτό που είπε ο 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.
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Re: Java - Double precision

Post by Einherjar » Tue May 17, 2005 4:56 pm

Code: Select all

String.format("%.5f",str); //όπου str το string που περιέχει τον αριθμό

Το παραπάνω επιστρέφει ένα νέο string με τα επιθυμητά ψηφία
[Better to understand a little than to misunderstand a lot]
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Tue May 17, 2005 6:28 pm

To output formating της C παραμονεύει παντού ε; :)
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
semika
Mbyte level
Mbyte level
Posts: 998
Joined: Sat May 01, 2004 2:21 pm
Location: Αθήνα - Β.Π.

Post by semika » Tue May 17, 2005 7:24 pm

Ευχαριστώ πολύ παιδιά ! :smile: :smile: :smile: :smile: :smile: :smile:
Θα προσπαθήσω τα παραπάνω και θα σας ενημερώσω!!!
Post Reply

Return to “Προγραμματισμός”