Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Απαντ. 35
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσ.
int i = amount.IndexOf(".") - amount.Length;
 
επομένως  αν i=-3 τότε Us format

ε?
<%
if ((amount.IndexOf(",") - amount.Length) == -3)
{
%>
GREEK AMOUNT FOUND
<%
}else if ((amount.IndexOf(".") - amount.Length) == -3)
{
%>
ENGLISH AMOUNT FOUND
<%
}
%>
Δημοσ.

εγώ σου είπα ... ουτε Us ουτε Gr

Το κανεις Parse χωρις "," η "." και διαιρείς με 1, 10 η 100 αναλογα το index

 

Αν μιλάς για την απάντηση σου στην 1η σελίδα.. απλώς δεν την καταλαβαίνω.. :unsure: Η λύση που έγραψα παραπάνω είναι λάθος;

Δημοσ.

 Γιατί double και όχι decimal; Λίγη οικονομία όταν γράφουμε δεν βλάπτει :)

 

Οικονομία σε τι πράγμα ακριβώς; Πέραν του ότι είναι συζητίσιμο το αν κάποια συγκεκριμένη οικονομία βλάπτει ή όχι (προφανώς οικονομία σε κάτι φτηνό η οποία σου κοστίζει περισσότερο σε κάτι "ακριβό" δεν είναι οικονομία), στην προκειμένη περίπτωση το decimal είναι πιο "ακριβό" από το double με όλους τους τρόπους που μπορώ να σκεφτώ.

 

Άρα;

 

Αν σίγουρα κάποιος θα γράψει είτε #,###.## ή #.###,## και όχι κάποιο από τα άλλα cultures τότε στα γρήγορα ένα παράδειγμα :

 

Δεν είναι λίγο καγκουριά να κάνεις set/reset το CurrentCulture όταν μπορείς να πετύχεις το ίδιο αποτέλεσμα χωρίς; Οι methods που καλείς έχουν overload που παίρνει και IFormatProvider.

 

Μόνο την τελευταία αν είναι το πολύ 2 χαρακτήρες από το τέλος.

 

Οι λυσεις με CultureInfo δεν δουλεύουν όταν πετύχει η Parse και σε US και σε Gr και δώσει διαφορετικά αποτελέσματα.

Ποιο θα είναι το σωστο μετά?

 

Νομίζω πως το έχω απαντήσει ήδη αυτό.

 

Βασικά το μόνο σίγουρο σε αυτά τα νούμερα είναι πως θα έχουν το σημείο "." ή "," στην 3η θέση από δεξιά, δηλαδή εμφανίζονται πάντα 2 δεκαδικά ψηφία.. Δεν είμαστε σίγουροι οτι θα έχουμε πάντα την χιλιάδα. Δηλαδή ###,## ή ##.##. Αν μπορέσουμε να μετρήσουμε την θέση του "," ή της τελείας "." από δεξιά προς αριστερά, θα μπορούμε να συμπεράνουμε με ακρίβεια σε ποιό locale είναι. Ίσως αυτή είναι η πιο απλή λύση, αλλά η IndexOf μετράει αριστερά προς δεξιά

 

Δεν καταλαβαίνω γιατί να θέλει κανείς να μπλέξει με τόσο χαμηλού επιπέδου string processing. Σε C# γράφουμε εδώ, όχι σε C.

 

Επίσης υπάρχει και ένα πολύ σημαντικότερο, φιλοσοφικό ζήτημα: εσένα σα δημιουργό του προγράμματος, τι σ' ενδιαφέρει να γίνεται όταν πάρεις είσοδο που δεν είναι σωστή (όπως π.χ. "10.10.10")?

 

Αν αυτό που θέλεις είναι να κάνεις "το λογικότερο" για κάποιον ορισμό του λογικότερου τότε ήδη η λύση που έδωσα παραπάνω σε καλύπτει (ενδεχομένως με κάποιες μετατροπές).

 

Αν αυτό που θέλεις είναι να γίνεται είναι να μη δέχεσαι καν τέτοιες εισόδους, μπορείς εύκολα να κάνεις ένα true/false έλεγχο με regular expression και στη συνέχεια να κάνεις το parsing (ξέροντας τώρα σίγουρα πως μόνο ένα από τα locales που έβαλες θα κάνει parse).

 

To point μου είναι: αφήστε τις μόντες με τα IndexOf κλπ κλπ για εκεί όπου όντως χρειάζονται. Το ζητούμενο στον κώδικα είναι να καταλαβαίνεις τι έγραψες όταν τον διαβάσεις μετά από 6 μήνες που δε θα θυμάσαι τίποτα.

Δημοσ.

απλώς δεν πρόκειται να λάβω ποτέ κάτι της μορφής 10.10.10 όπως ανέφερες, θα λάβω στάνταρντ ένα ποσο με στα όρια από ##.###,##  μέχρι ##,## με εναλλάξ τα σημεία στίξης εννίοτε. Γι'αυτό αναζήτησα κάτι "απλό" κ κατανοητό. Δεν είμαι programmer και ήθελα απλώς μια μόντα για να στείλω αυτό το ποσό κάπου αλλού. 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...