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

 

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

Πως να κανω ενα string να ειναι single?

Îåêßíçóå áðü ôï ìÝëïò tsomos. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 18-01-2009, 23:39. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-01-2009, 13:13 47683

    Πως να κανω ενα string να ειναι single?

    Για...
    εχω ενα αρχει που εχει μεσα την τιμη πχ, "-1332,3434" ή "13344.45052". Τη διαβάζω απο το αρχειο σαν string.Μεχρι εδω οκ.
    Tωρα θέλω να κάνω την τιμή αυτή να είναι single, και όταν κάνω csng(variable) τότε έχω την εξής τιμη:
    1334445052.0 SurpriseSurprise
    Αν το κανω int τότε χάνω τα δεκαδικά ψηφία. Εγω θέλω να είναι δεκαδικός αριθμός. Μήπως υπάρχει τρόπος να σεταρω το ακεραιο και το δεκαδικο ξεχωριστα ;

    Το προβημα μου ειναι οτι απο string "13344.45052" γίνεται αρθιμος 1334445052.0 ενώ θα ήθελα να γίνεται αριθμος 13344,45052...
    Τι να κανω?Tongue Tied
    υγ:μιλαμε για vb

  •  16-01-2009, 13:41 47685 σε απάντηση της 47683

    Απ: Πως να κανω ενα string να ειναι single?

    Δες εδώ: http://msdn.microsoft.com/en-us/library/system.single.parse.aspx

     


    Vir prudens non contra ventum mingit
  •  16-01-2009, 13:51 47686 σε απάντηση της 47683

    Απ: Πως να κανω ενα string να ειναι single?

    Η CSng υπάρχει μόνο στη VB και ουσιαστικά είναι κατάλοιπο της VB 6, καθώς  όλοι οι αριθμητικοί τύποι έχουν την μέθοδο Parse η οποία κάνει αυτό που σου έγραψε ο Μανώλης. Μετατρέπει δηλαδή το string στον τύπο που σε ενδιαφέρει. Θα πρέπει να επιλέξεις με προσοχή τί τύπο θέλεις να χρησιμοποιήσεις όμως. Οι Single και Double είναι floating point και αποθηκεύουν προσεγγιστικά την τιμή που τους δίνεις ενώ ο Decimal που δεν είναι, την αποθηκεύει ακριβώς.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  16-01-2009, 13:56 47687 σε απάντηση της 47686

    Απ: Πως να κανω ενα string να ειναι single?

    Ευχαριστω...λυθηκε
  •  17-01-2009, 16:11 47706 σε απάντηση της 47687

    Απ: Πως να κανω ενα string να ειναι single?

    Και κατι άλλο πέρα απο αυτο. Στα αγγλικα(ηπα) είναι της μορφής 453.0901 ενώ στα ελληνικά είναι 453,0901. Αυτο εξαρταται απο τα regional setting το τι εχει ορισει ο καθε ενας ως decimal symbol.
    Πως μπορω να δω ποιο είναι το decimal symbol(. ή , ή οτιδηποτε αλλο) που είναι ορισμένο στο ΛΣ; Υπαρχει καποια function που σου λέι οτι το decimal symbol είναι το τάδε;
  •  17-01-2009, 16:23 47707 σε απάντηση της 47706

    Απ: Πως να κανω ενα string να ειναι single?

    οκ...το βρηκα ...
    MsgBox(Mid$(Format(1.2, "0.0"), 2, 1))
  •  18-01-2009, 01:37 47718 σε απάντηση της 47707

    Απ: Πως να κανω ενα string να ειναι single?

    Αφενός, γιατί χρειάζεσαι τον χαρακτήρα που υποδηλώνει τα δεκαδικά μέρη; Ενδεχομένως να σου χρησιμεύει κάποια από τις εναλλακτικές συντάξεις της Single.Parse.

    Αφετέρου, βλέπω ότι στον κώδικά σου χρησιμοποιείς το στυλ της VB6. Μιας και είμαστε στα πρώτα βήματα, μια συμβουλή είναι να ξεχάσεις το MsgBox - είναι MessageBox.Show() πλέον - και το Mid$ - είναι String.Substring. Γένικά, ακολουθώντας τη σύνταξη της VB6 δεν μπορείς να ανακαλύψεις τις ομορφιές του .NET Framework. Θα εκπλαγείς με το τι μπορείς να κάνεις αν πληκτρολογήσεις "string" και πατήσεις κατόπιν την τελεία. Αν συνηθίσεις και μπεις σε αυτή λογική, μετά θα "υποψιάζεσαι" το πως θα πρέπει να "δουλεύει" κάτι και θα το βρίσκεις εύκολα χωρίς καν να το έχεις ξαναχρησιμοποιήσει. 


    Vir prudens non contra ventum mingit
  •  18-01-2009, 23:39 47735 σε απάντηση της 47707

    Απ: Πως να κανω ενα string να ειναι single?

    tsomos:
    οκ...το βρηκα ...
    MsgBox(Mid$(Format(1.2, "0.0"), 2, 1))

    Δεν μπορώ να πω ότι ο παραπάνω κώδικας είναι ο κατάλληλος για να πετύχεις αυτό που θέλεις. Ακόμα και αν χρειαζόσουν να ξέρεις ποιό σύμβολο χρησιμοποιείται για δεκαδικό, που ΔΕΝ  το χρειάζεσαι, η χρήση μεθόδων της VB6 σε κώδικα .NET μόνο μπελάδες θα σου δημιουργήσει. Καταρχήν, χρησιμοποιείς πολύ περισσότερο κώδικα για να κάνεις μία απλή δουλειά, μετά χρησιμοποιείς μεθόδους με γνωστά προβλήματα σε non-US υπολογιστές.  Ας τα πάρουμε από την αρχή.

    ΔΕΝ χρειάζεσαι το δεκαδικό - αν προσπαθήσεις να το "καρφώσεις" μάλιστα θα έχεις διαπράξει ένα από τα χειρότερα σφάλματα στο .NET . Το .NET καταλαβαίνει αυτόματα ποιό είναι το locale του χρήστη κι έτσι κάνει σωστά τις μετατροπές, χρησιμοποιώντας τα δεκαδικά που έχουν οριστεί στα Regional Settings. Μπορείς άνετα να αλλάξεις τη γλώσσα μίας εφαρμογής αλλάζοντας το CurrentCulture του Thread της εφαρμογής αλλά και αυτό συνήθως δεν χρειάζεται. Σε ένα PC με ελληνικά Windows, το .NET θα χρησιμοποιήσει αυτόματα το , ως δεκαδικό. Σε PC με αγγλικά Windows, το .

    Δυστυχώς, πολλοί προγραμματιστές προσπαθούν να "καρφώσουν" το δεκαδικό για να αντιμετωπίσουν άλλα προβλήματα στον κώδικα τους. Για παράδειγμα, αν κάποιος χρησιμοποιεί χύμα SQL αντί για sql statements με παραμέτρους, θα έχει πρόβλημα αν ο αριθμός έχει , για δεκαδικό. Αντί όμως να διορθώσουν τον κώδικα τους, πολλοί προγραμματιστές θεωρούν ότι το πρόβλημα είναι του .NET και προσπαθούν να .... το διορθώσουν. Μία περιττή διόρθωση όμως συνήθως κάνει ζημιά, την οποία οι προγραμματιστές αυτοί προσπαθούν να διορθώσουν προσθέτωντας επιπλέον μυστήριο κώδικα. Έχοντας κληρονομήσει τέτοιο κώδικα στο παρελθόν, μπορώ να σε διαβεβαιώσω ότι η μόνη σωτηρία είναι να τον σβήσεις όλον. Γι αυτό και θεωρώ το κάρφωμα των δεκαδικών ως ένα από τα χειρότερα σφάλματα.

    Σε αυτό τον καταστροφικό κώδικα έχω συναντήσει και προσπάθειες να βρεθεί το δεκαδικό με κώδικα παρόμοιο με αυτό που έδωσες. Τέτοιος κώδικας όμως ήταν περιττός ακόμα και στην VB6, γιατί μπορούσες πάντα να πάρεις το δεκαδικό μέσα από το κατάλληλο Win32 function. Στο .NET μπορείς να πάρεις όλες τις αντίστοιχες πληροφορίες μέσω του CultureInfo class και συγκεκριμένα του NumberFormat property. Μπορείς πχ. να βρεις ποιό είναι το δεκαδικό για την τρέχουσα εφαρμογή με το CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator ή της CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator. Βλέπεις, στα regional settings ο χρήστης μπορεί να ορίσει διαφορετικό format για χρηματικά ποσά και διαφορετικό για αριθμούς. Το .NET χρησιμοποιεί αυτόματα αυτά τα σύμβολα όταν μετατρέπει αριθμούς σε κείμενα και το αντίστροφο.

    Τέλος, ο τρόπος με τον οποίο μετατρέπεις αριθμό σε κείμενο στο .NET είναι είτε η ToString() είτε η String.Format. Η Format που χρησιμοποίησες υπάρχει μόνο για συμβατότητα προς τα πίσω με τη VB6 και κληρονομεί όλα τα κουσούρια της. Αν θέλεις π.χ. να μετατρέψεις ένα αριθμό σε string, μπορείς να γράψεις String.Format("These are numbers {0} {1}",3.45,6.89) . Αν όμως οι αριθμοί είναι χρηματικά ποσά μπορείς να γράψεις String.Format("These are currency values {0:C} {1:C}",3.45,6.89) . Μπορείς να κάνεις και άλλους συνδυασμούς όπως να ορίσεις ακριβώς το συνολικό μήκος του string, τον αριθμό των δεκαδικών, το alignment κλπ.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems