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

 

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

decimal (κομμα και τελεία)

Îåêßíçóå áðü ôï ìÝëïò Scientist. Τελευταία δημοσίευση από το μέλος Mitsaras στις 29-03-2007, 16:00. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-03-2007, 13:37 27361

    decimal (κομμα και τελεία)

    καλησπερα σε όλους,

    έχω φτιάξει μια εφαρμογή με καποια πεδία που στη βαση SQL τα εχω χαρακτηρισει ως decimal. Στη σελίδα ASP.NET σε textboxes παιρνάω αυτά τα πεδία. Και εκεί τα παιρνάω ως παραμέτρους ως decimal. To πρόβλημα μου είναι πως αν κάποιος καταχωρισει κατι με κόμμα το παιρνει ως χιλιαδες κατι που δε θελω...εχει κανεις καμια λύση; Τι να γραψω ή να κανω επιπλέον στην ASP.NET σελίδα μου;

    ευχαριστώ εκ των προτέρων

  •  29-03-2007, 13:58 27369 σε απάντηση της 27361

    Απ: decimal (κομμα και τελεία)

    Το θέμα έχει ξανασυζητηθεί πολλές φορές. Το parsing των strings γίνεται βάση του locale στο οποίο τρέχει η εφαρμογή. Δεν μπορείς ούτε πρέπει να απαιτείς ο χρήστης να χρησιμοποιήσει ντε και καλά συγκεκριμένο locale. Σε εφαρμογές Windows Forms, αυτό είναι το locale που έχει επιλέξει ο χρήστης στα regional settings. Στην περίπτωση των web applications, έχει να κάνει με το locale και τις γλώσσες που έχει ορίσει ο χρήστης στον browser του.
    Αυτό που μπορείς να κάνεις είναι να μην επιτρέπεις στο χρήστη να βάλει λάθος υποδιαστολή, ανάλογα με το locale του. Αυτό μπορείς να το πετύχεις π.χ. με ένα control που επιτρέπει masks, ή με validation.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-03-2007, 14:16 27370 σε απάντηση της 27369

    Απ: decimal (κομμα και τελεία)

    Σε web applications το θέμα δεν είναι και τόσο απλό. Κατ' αρχήν ο χρήστης μπορεί να έχει σε λανθασμένη σειρά τις προτιμώμενες γλώσσες στον browser, ή να μην έχει ορίσει καν γλώσσες -- και μάλιστα να μην έχει ιδέα ότι υπάρχει τέτοιο πράγμα.
    Επιπλέον, δεν είναι προφανές το πώς να κάνεις mask. Στα ελληνικά έχουμε την τελεία για διαχωριστή χιλιάδων και το κόμμα για υποδιαστολή, ενώ στα αμερικάνικα είναι το ακριβώς αντίθετο, και σε ορισμένες γλώσσες δεν γκρουπάρονται καν τα ψηφία ανά 3. Θα πρέπει να γράψεις σοφιστικέ κανονική έκφραση για να το τσεκάρεις, είτε server side είτε και client side.
    Θα σε βοηθήσουν επίσης και κάποια domain validations που θα πιάσουν αυτό που θα σου ξεφύγει. Π.χ. αν εισάγεις ισοτιμίες ευρώ-δολαρίου, και πάρεις την τιμή 1.000 (δηλαδή χίλια με τα ελληνικά regional settings)... ε μάλλον κάτι δεν πάει καλά.

    Νατάσα Μανουσοπούλου
  •  29-03-2007, 14:31 27371 σε απάντηση της 27370

    Απ: decimal (κομμα και τελεία)

    καταρχην σας ευχαριστω και τους δυο για τις απαντησεις που μου δώσατε

    Νατασα θα ηθελα να γινεις αν μπορεις πιο σαφης. Εχω κανει τα εξης μεσα στο κωδικα:

     

    Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click

    If Me.txtNetValue.Text = "" Then Exit Sub

    If Me.txtVATValue.Text = "" Then Exit Sub

     

    Dim Cmd As SqlClient.SqlCommand = Database.GetCommand("dbo.web_ExpensesInsert")

    Cmd.Parameters.Add("@EXP_NETVALUE", SqlDbType.Decimal).Value = Me.txtNetValue.Text

    Cmd.Parameters.Add("@EXP_VATVALUE", SqlDbType.Decimal).Value = Me.txtVATValue.Text

    Database.CommandExecuteNonQuery(Cmd, True)

    Me.txtNetValue.Text = ""

    Me.txtVATValue.Text = ""

    End Sub

     

    Υπάρχει λύση;

  •  29-03-2007, 15:21 27378 σε απάντηση της 27371

    Απ: decimal (κομμα και τελεία)

    Χρησιμοποίησα το παρακάτω και μου βγήκε:

    Me.txtNetValue.Text = Replace(Me.txtNetValue.Text, ",", ".")

    thanx

  •  29-03-2007, 15:49 27382 σε απάντηση της 27378

    Απ: decimal (κομμα και τελεία)

    Δυστυχώς αυτό είναι λάθος γιατι αν ο χρήστης εχει γράψει π.χ. 1,412.50 εσυ το μετατρεπεις μετά σε 1.412.50 οπότε μπορείς να καταλάβεις πως θα έχεις πρόβλημα.
    Εφόσον έχεις να κάνεις με web αναγκαστικά θα πρέπει να ελέγξεις τα locales η έστω να έχεις κάποια ένδειξη προς το χρήστη. Όπως και να το δείς πάντως είναι πονεμένο το θέμα.
  •  29-03-2007, 16:00 27383 σε απάντηση της 27382

    Απ: decimal (κομμα και τελεία)

    Αν είναι λίγα τα πεδία, μπορείς να χρησιμοποιήσεις δύο textBox, με το παρακάτω layout:
    [     ],[   ]

    με την απαραίτητη επεξήγηση από δίπλα.

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