Formattazione numeri

di il
8 risposte

Formattazione numeri

Buone feste a tutti.
Non riesco a risolvere un problema di formattazione di una textbox contenente un valore numerico, in un progetto che sto realizzando con Visual Studio Express 2013 per Windows Desktop, e vorrei essere aiutato:
usando sia TextBox=Format(CDbl(TextBox.Text), "#,##0.00") che TextBox=FormatNumber(TextBox.Text, 2, , , TriState.True) mi viene restituito il valore formattato con due decimali e separatore di migliaia.
Il problema è che se i decimali inseriti nella textbox sono più di due, il valore restituito è arrotondato alla seconda cifra, ma non riesco più a recuperare il valore originario. Es.: se inserisco "1234,5678", nella textbox viene visualizzato "1.234,57" ma è più possibile conoscere il valore inserito, salvo che non sia assegnato a una variabile temporanea prima della formattazione.
Esiste un metodo che mi permetta di visualizzare il valore formattato lasciando comunque assegnato alla textbox il valore originario?
Grazie anticipatamente per l'aiuto.

8 Risposte

  • Re: Formattazione numeri

    MiCo ha scritto:


    Esiste un metodo che mi permetta di visualizzare il valore formattato lasciando comunque assegnato alla textbox il valore originario?
    Se ho compreso bene, il problema deriva dal fatto che stai arrotondando a n. 2 decimali con la funzione FormatNumber mentre in realtà vorresti 4 cifre. E' corretto?

    Per risolvere, direi che è sufficiente modificare il parametro NumDigitsAfterDecimal della suddetta funzione per passare da 2 a 4 decimali.

    Se invece la visualizzazione a 2 decimali è giusta ma vuoi mantenerne 4, non c'è altro modo che salvarti il valore effettivo più preciso e inserirlo nella TextBox quando questa riceve il focus in modo che l'utente possa editare il valore reale e ottenere in seguito la visualizzazione del valore arrotondato.

    Se non vuoi optare per la sostituzione, allora dovrai mostrare il valore in un controllo diverso, es. in un controllo Label distinto.

    Se non è quello che volevi ottenere, magari prova a descrivere meglio lo scenario.

    Ciao!
  • Re: Formattazione numeri

    MiCo ha scritto:


    Esiste un metodo che mi permetta di visualizzare il valore formattato lasciando comunque assegnato alla textbox il valore originario?
    assegnare ad una variabile il contenuto della textbox prima di modificarlo con le formattazioni che hai mostrato
  • Re: Formattazione numeri

    patel ha scritto:


    MiCo ha scritto:


    Esiste un metodo che mi permetta di visualizzare il valore formattato lasciando comunque assegnato alla textbox il valore originario?
    assegnare ad una variabile il contenuto della textbox prima di modificarlo con le formattazioni che hai mostrato
    Come ti ha suggerito Patel, prima del
    TextBox.Text = Format(CDbl(TextBox.Text), "#,##0.00")
    potresti fare un
    TextBox.Tag = TextBox.Text
    e poi quando devi recuperare il valore originario userai
    TextBox.Tag.ToString
  • Re: Formattazione numeri

    Grazie a tutti per le risposte.
    Avevo intuito che bisognava assegnare a una variabile il valore della textbox (semmai, come dice SirJo, inserendolo nel tag della textbox), ma ritenevo che esistesse un metodo che lasciasse inalterata la stringa originaria nella textbox e permettesse solo di visualizzarla diversamente formattata (come succede in excel, ove, inserendo un valore in una cella, è possibile visualizzarlo utilizzando il separatore delle migliaia, aumentando o diminuendo i decimali e altro, ma senza che il contenuto della cella sia modificato).
    Nel mio progetto, pensavo di inserire due TrackBar- una per modificare l'arrotondamento (per difetto, per eccesso e +/- 5) e l'altra per aumentare i decimali (da zero a TrackBar.Maximum), e questo sarebbe stato facile se la textbox funzionava come la cella di excel.
    Se non c'é altro metodo oltre a Format e FormatNumber, mi dovrò rassegnare.
  • Re: Formattazione numeri

    Una textbox contiene solo testo, una volta modificata non puoi tornare indietro, non ha niente a che vedere con una cella di excel
  • Re: Formattazione numeri

    patel ha scritto:


    Una textbox contiene solo testo, una volta modificata non puoi tornare indietro, non ha niente a che vedere con una cella di excel
    Ebbene, siccome la mia textbox contiene una stringa numerica, non potrò mai assegnare il valore al tag (textbox.tag=cdbl(textbox.text)), ma solo la stringa (textbox.tag=textbox.txt) che, eccetto per il primo input, sarà sempre formattata.
    Non vedo soluzioni per conservare traccia della stringa numerica non formattata.
  • Re: Formattazione numeri

    Infatti nel tag devi salvare solo textbox.text, lo strasformerai in double solo quando ti servirà ed eventualmente arrotonderai il double
  • Re: Formattazione numeri

    Per il momento, ho risolto così, dove TxC è la TextBox e tagC è una variabile double:

    Private Sub TxC_GotFocus(sender As Object, e As EventArgs) Handles TxC.GotFocus
    If tagC Then TxC.Text = Mid(Str(tagC), 2) 'elimina lo spazio iniziale
    TxC.Text = Replace(TxC.Text, ".", ",")
    End Sub

    Private Sub TxC_Leave(sender As Object, e As EventArgs) Handles TxC.Leave
    If TxC.Text <> "" Then tagC = CDbl(TxC.Text) Else tagC = 0
    If tagC Then TxC.Text = FormatNumber(tagC, 2, , , TriState.True)
    End Sub
Devi accedere o registrarti per scrivere nel forum
8 risposte