Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Double, Decimal & Currency

Îåêßíçóå áðü ôï ìÝëïò mdtgr. Τελευταία δημοσίευση από το μέλος Νατάσα Μανουσοπούλου στις 04-03-2007, 20:33. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-03-2007, 11:48 25758

    Double, Decimal & Currency

    Σε μια φόρμα (vb2005) έχω το textbox μου που χρησιμεύει για την εισαγωγή τιμής σε ευρώ με τρία δεκαδικά.

    Η απορία μου είναι ότι την τιμή την περνάω σε μια μεταβλητή την οποία μπορώ να την ορίσω ως Double ή Decimal (ανάλογα με την ακρίβεια των υπολογισμών αν έχω καταλάβει καλά) όταν όμως πάω να φτιάξω τον πίνακα σε SQL βάση βλάπω ότι το αντίστοιχο πεδίο μπορώ να το ορίσω μόνο ως Decimal.

    Χρειάζομαι τη βοήθειά σας (πάλι) για να καταλάβω την σχέση μεταξύ τιμών που αφορούν currency και πως αυτές ορίζονται και διαχειρίζονται τόσο σε VB όσο και σε SQL(Express).

    Θα ήθελα αν γίνετε να συμπεριλάβετε και τι ακριβώς γίνεται με τα trailing zeroes επειδή θέλω να τα εμφανίζω όπου αυτό χρειάζεται.

    Ευχαριστώ.


    Μάνος Τ.
  •  03-03-2007, 00:32 25787 σε απάντηση της 25758

    Απ: Double, Decimal & Currency

    mdtgr:

    Σε μια φόρμα (vb2005) έχω το textbox μου που χρησιμεύει για την εισαγωγή τιμής σε ευρώ με τρία δεκαδικά.

    Η απορία μου είναι ότι την τιμή την περνάω σε μια μεταβλητή την οποία μπορώ να την ορίσω ως Double ή Decimal (ανάλογα με την ακρίβεια των υπολογισμών αν έχω καταλάβει καλά) όταν όμως πάω να φτιάξω τον πίνακα σε SQL βάση βλάπω ότι το αντίστοιχο πεδίο μπορώ να το ορίσω μόνο ως Decimal.

    Χρειάζομαι τη βοήθειά σας (πάλι) για να καταλάβω την σχέση μεταξύ τιμών που αφορούν currency και πως αυτές ορίζονται και διαχειρίζονται τόσο σε VB όσο και σε SQL(Express).

    Τα Double και Decimal στο .NET ορίζουν αριθμούς κινητής υποδιαστολής. π.χ. το double που καταλαμβάνει έως 8 ψηφία, τα οποία μπορεί να είναι όλα πριν την υποδιαστολή ή όλα μετά ή 4 πριν και 4 μετά. Το Decimal είναι διπλάσιο του double. Στον sql server το decimal δεν έχει κινητή υποδιαστολή, μια που δηλώνεις ακριβώς τον αριθμό δεδαδικών που υποστηρίζει, με την βοήθεια της ιδιότητας precision της αντίστοιχης στήλης. Υπάρχουν επίσης οι τύποι float και real στον sql server, που είναι κινητής υποδιαστολής. Το float μπορεί να είναι από 1 έως 53 bit (δηλαδή χωράει έως και double αριθμούς του .net), ενώ το real είναι 4 bytes.

    Υπάρχουν και άλλες επιλογές, ανάλογα με την ακρίβεια και το μέγεθος των δεδομένων που έχεις. Διάβασε αυτό 

    mdtgr:

    Θα ήθελα αν γίνετε να συμπεριλάβετε και τι ακριβώς γίνεται με τα trailing zeroes επειδή θέλω να τα εμφανίζω όπου αυτό χρειάζεται.

    Αυτό το θέμα δεν πρέπει να σε απασχολήσει σε επίπεδο βάσης δεδομένων. Εκεί θα αποθηκεύεις την τιμή σου σε αριθμητικό πεδίο και αν θέλεις σε κάποια φόρμα να εμφανίζεται με μηδενικά, θα το κάνεις εκεί. π.χ. αν γράψεις debug.writeline(string.format("{0:000000.00}", 43.3)) θα πάρεις σαν αποτέλεσμα το 000043,30


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  03-03-2007, 11:09 25802 σε απάντηση της 25787

    Απ: Double, Decimal & Currency

    Ευχαριστώ για τη  βοήθεια.Smile

    Βλέποντας το link που παρείχες στην απάντησή σου μού δημιουργήθηκε μία άλλη απορία

    Τι σημαίνουν "CLR Data Type (SQL Server)" & "CLR Data Type (.Net Framework)"΄;;;


    Μάνος Τ.
  •  03-03-2007, 14:50 25810 σε απάντηση της 25802

    Απ: Double, Decimal & Currency

    CLR είναι τα αρχικά απο το Common Language Runtime το οποίο είναι η κοινή γλώσσα την οποία καταλαβαίνουν όλες η .Net based γλώσσες. Όταν εσύ γράφεις κώδικα σε VB.Net ή C# αυτή κατά το compile μετατρέπεται σε IL (MSIL) και εκτελείται πάνω στο CLR. Στον SQL Server 2005 προστέθηκε η δυνατότητα να υπάρχει native support όταν φτιάχνεις ένα .net assembly (.dll ή exe) να το "βλέπει" ο SQL Server. Αυτό σημαίνει ότι μπορείς να φτιάξεις ένα δικό σου τύπο δεδομένων (CLR Data Type) τον οποίο o SQL Server δεν το ήξερε πριν όπως κάποιοuς άλλους (varchar, int κλπ).
    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  04-03-2007, 20:33 25870 σε απάντηση της 25758

    Απ: Double, Decimal & Currency

    Τόσο ο double όσο και ο decimal είναι αριθμοί κινητής υποδιαστολής, δηλαδή της μορφής m(antissa) x b(ase)^e(xponent), όπου το b εννοείται και αποθηκεύουμε το m και το e.

    Η βασική (και πολύ σημαντική) διαφορά μεταξύ decimal και double είναι η βάση τους b, γιατί στον decimal είναι το 10 ενώ στον double το 2.

    Ο decimal παριστάνει δεκαδικούς αριθμούς με ορισμένη ακρίβεια, δηλαδή είναι στη μορφή (+/-) a x 10^-b, όπου το a έχει 96 bits παράστασης και το b είναι εκθέτης με τιμές από 0 ως 28.

    Ο double από την άλλη είναι floating point αριθμός κατά το πρότυπο ΙΕΕΕ 754, και η δεκαδική του ακρίβεια εξαρτάται από (και είναι έχει αντίστροφη σχέση με) το απόλυτο μέγεθός του. Επίσης σε double μπορεί να παρασταθεί το +/-∞ και άκυροι αριθμοί (NaN, not a number) που δεν ορίζονται σε decimal.

    Στις βάσεις δεδομένων η παράσταση των αριθμών έχει συνήθως σταθερή δεκαδική ακρίβεια, η οποία είναι και απαραίτητη σε οποιοδήποτε οικονομικό υπολογισμό, γι' αυτό και υπάρχει άμεση αντιστοίχιση με τον decimal. Τον double θα τον δεις συνήθως σε επιστημονικούς υπολογισμούς (π.χ. προσομοιώσεις).

    Νατάσα Μανουσοπούλου
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems