Gambas-it

Gambas3 => Programmazione => Topic aperto da: ilfurlan - 09 Febbraio 2017, 17:38:27

Titolo: [RISOLTO] € con due numeri dopo la virgola
Inserito da: ilfurlan - 09 Febbraio 2017, 17:38:27
Nelle mie prove, fin qui ci sono riuscito ma una cosa non mi funziona:

Ho messo una TextBox1 per il prezzo (numero con virgola)
Ho messo una TextBox2 per la quantità (numero intero)
Ho messo una TextBox3 per il totale (numero con virgola)

ho scritto e provato questo codice che funziona:
Codice: [Seleziona]
Dim vString As String
vString = TextBox1.Text
TextBox3.Text = Val(vString) * TextBox2.Text
TextBox3.Text = Format$(TextBox3.Text, "€0.00")
se però aggiungo alla fine questa riga, per dare il giusto formato al valore che ho scritto nella TextBox1,
mi restituisce un errore e non capisco il motivo visto che è uguale a quella per la TextBox3
Codice: [Seleziona]
TextBox1.Text = Format$(TextBox1.Text, "€0.00")

 :'(
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: Gianluigi - 09 Febbraio 2017, 18:07:01
E se invece scrivi cos?ì:
Codice: [Seleziona]
TextBox1.Text = Format$(Val(TextBox1.Text), "€0.00")

Anzi ti converrebbe riscrivere così:
Codice: [Seleziona]
  TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text) 
  TextBox3.Text = Format$(TextBox3.Text, "€0.00")
  TextBox1.Text = Format$(Val(TextBox1.Text), "€0.00")

o anche:
Codice: [Seleziona]
  TextBox3.Text = Format$(Val(TextBox1.Text) * Val(TextBox2.Text), "€0.00")  
  TextBox1.Text = Format$(Val(TextBox1.Text), "€0.00")

Però ti converrebbe gestire l'immissione dei dati per evitare errori di battitura ecc.
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: vuott - 09 Febbraio 2017, 20:24:03
mi restituisce un errore e non capisco il motivo visto che è uguale a quella per la TextBox3
...perché la rappresentazione in formato Stringa del valore numerico in virgola mobile, presente nel primo argomento della funzione "Format( )", deve contenere il punto e non la virgola.
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: ilfurlan - 09 Febbraio 2017, 21:36:00
mi restituisce un errore e non capisco il motivo visto che è uguale a quella per la TextBox3
...perché la rappresentazione in formato Stringa del valore numerico in virgola mobile, presente nel primo argomento della funzione "Format( )", deve contenere il punto e non la virgola.
Grazie vuott, quindi dovrei trasformare
€ 10,50 in 10.50
fargli fare il calcolo e riconvertirlo con la vorgola... se così non sono sulla strada giusta  ???
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: ilfurlan - 09 Febbraio 2017, 21:40:14
Però ti converrebbe gestire l'immissione dei dati per evitare errori di battitura ecc.

Grazie Gianluigi, che piacere risentirti...

Avevo iniziato a studiare come gestire l'immissione dati dall'utente grazie ad un vecchio post di vuott,
ma poi ho voluto provare questa soluzione.

A momenti sono entusiasta altri mi avvilisco  :-[ non arriverò mai ai vostri livelli  :hard:
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: ilfurlan - 09 Febbraio 2017, 22:12:14
Così funziona
Codice: [Seleziona]
Public Sub TextBox1_Change()

Dim vString As String
TextBox1.Text = Format$(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
vString = TextBox1.Text
TextBox3.Text = Val(vString) * TextBox2.Text
TextBox3.Text = Format$(TextBox3.Text, "€0.00")

End
la prima riga mi costringe ad inserire i dati in un certo modo, senza errori, ma;
1) non mi permette di mettere il simbolo dell'euro
2) se scrivo ad esempio 150,50 e invece dovevo scrivere 140,50 non posso cambiare solo il 5 ma devo cancellare anche tutto quello che sta a destra
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: tornu - 09 Febbraio 2017, 22:25:05
Guarda se questo esempio ti può essere di aiuto
Codice: [Seleziona]
Public Sub txtPrezzoCli_LostFocus()
  Dim sValore, sValore2 As String
  Dim i As Integer

  sValore = txtPrezzoCli.Text
  sValore2 = ""
 
  For i = 1 To Len(sValore)
    Select Case Mid(sValore, i, 1)
      Case "0" To "9"
        sValore2 &= Mid(sValore, i, 1)
      Case ",", "."
        sValore2 &= ","
      Case Else
        sValore2 &= ""
    End Select
  Next

  If txtPrezzoCli.Text <> "" Then
      txtPrezzoCli.Text = Format(Val(sValore2), "$#,0.00")
      txtPrezzoCli.Alignment = 2
    Else If IsNull(txtPrezzoCli.Text) Then
      txtPrezzoCli.Text = "€ 0,00"
      txtPrezzoCli.Alignment = 2
  Endif
End
Con questo codice è indifferente se digiti i decimali separati da virgola o punto verranno in ogni caso
formattati correttamente anteponendo il simbolo dell'euro. Per esempio:
se digiti 123.50 verrà formattato € 123,50
se digiti 1236.21 verrà formattato € 1.236,21
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: vuott - 10 Febbraio 2017, 00:12:03
vuott, quindi dovrei trasformare
Suggerivo insomma una cosa come segue (anche tenendo in conto qualcosa indicata nella formattazione da tornu):
Codice: [Seleziona]
Public Sub Button1_Click()

   Dim vString As String
 
  vString = TextBox1.Text
  TextBox3.Text = Format$(Val(vString) * TextBox2.Text, "$#,0.00")
  TextBox1.Text = Format$(Val(TextBox1.Text), "$#,0.00")

End
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: vuott - 10 Febbraio 2017, 01:24:33
A momenti sono entusiasta altri mi avvilisco 

...insomma anche tu credi che esistano linguaggi di programmazione facili facili.  Eh ?
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: Gianluigi - 10 Febbraio 2017, 17:13:28
Però ti converrebbe gestire l'immissione dei dati per evitare errori di battitura ecc.

Grazie Gianluigi, che piacere risentirti...

Avevo iniziato a studiare come gestire l'immissione dati dall'utente grazie ad un vecchio post di vuott,
ma poi ho voluto provare questa soluzione.

A momenti sono entusiasta altri mi avvilisco  :-[ non arriverò mai ai vostri livelli  :hard:

Tu scrivi questo, però poi non dai retta ai miei suggerimenti, potrebbe essere che io non sia stato sufficientemente chiaro, strano perchè normalmente io ne ho ricevuto di più criptici e sono spesso riuscito a decifrarli, naturalmente mettendo attenzione a ciò che mi veniva detto anche se in forma stringata.
Non sempre naturalmente e allora memore della fatica fatta specialmente all'inizio voglio essere più chiaro e farti capire cosa intendo, ti allego pertanto un esempio.
Sia chiaro che questi non è esaustivo e tantomeno è l'unico modo, anche perché cosa esattamente vuoi non lo hai detto.
È un modo fra tanti per dare un'idea di come Gambas metta a disposizione vari mezzi che ci possono aiutare.

Scusa ho aggiunto il lostfocus all'ultimo senza rendermi conto che i messaggi lo attivano, tolto
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: ilfurlan - 10 Febbraio 2017, 21:07:53
Citazione
Tu scrivi questo, però poi non dai retta ai miei suggerimenti, potrebbe essere che io non sia stato sufficientemente chiaro, ...

Grazie Gianluigi e grazie a tutti quelli che mi hanno dato dei suggerimenti....
Facendo il punto della situazione, è che ho capito che NON ho capito come far interagire tra loro variabili diverse (ad esempio avanti ad un valore Float).
Poi succedono cose strane, ad esempio ho scritto questo codice e funziona:
Codice: [Seleziona]
Dim vStringa As String
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
vStringa = TextBox1.Text
TextBox2.Text = (Val(vStringa) * 5)
Ho fatto il programma allegato con delle ValueBox che sono messe a disposizione apposta anche per la valuta, e non funziona...  :rolleyes:
Poi, per quanto concerne il tuo suggerimento, parlando di controllo inserimento, avevo inteso ti riferissi a questa riga che di fatto fa in qualche modo il controllo lo fa in tempo reale
Codice: [Seleziona]
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
Insomma, cerco di capire perchè se devo rifare qualche cosa di simile vado tranquillo...

Grazie mille del tuo esempio pratico, mi è molto utile.
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: tornu - 11 Febbraio 2017, 12:22:18
Devi fare semplicemente così
Codice: [Seleziona]
Public Sub ValueBox1_Change()
  ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End

Public Sub ValueBox2_Change()
  ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End

Tu hai usato delle ValueBox impostando per La ValueBox1 e 3 la propietà Currency e per la ValueBox2 la
proprietà Number, quindi i valori che digiti in questi oggetti sono già dei valori numerici che non hai bisogno
di convertire per le operazioni matematiche.
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: Gianluigi - 11 Febbraio 2017, 12:56:46
Si, ValueBox si usa come ha detto Tornu, a parte che l'uso di Change per l'operazione mi sembra un non senso e qui addirittura due per la stessa operazione poi...

Però vorrei pregare Ilfurlan di attenersi all'oggetto della discussione e se vuole chiedere altre cose aprire altre discussioni.

La regola un oggetto per una discussione serve poi nelle ricerche di chi avrà in futuro gli stessi quesiti a cui cerca risposte.

Cerchiamo tutti di darci una mano e di non tramutare questo forum in caos.

Grazie
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: Gianluigi - 11 Febbraio 2017, 13:52:23
Citazione
Tu scrivi questo, però poi non dai retta ai miei suggerimenti, potrebbe essere che io non sia stato sufficientemente chiaro, ...

Grazie Gianluigi e grazie a tutti quelli che mi hanno dato dei suggerimenti....
Facendo il punto della situazione, è che ho capito che NON ho capito come far interagire tra loro variabili diverse (ad esempio avanti ad un valore Float).
Poi succedono cose strane, ad esempio ho scritto questo codice e funziona:
Codice: [Seleziona]
Dim vStringa As String
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
vStringa = TextBox1.Text
TextBox2.Text = (Val(vStringa) * 5)
Ho fatto il programma allegato con delle ValueBox che sono messe a disposizione apposta anche per la valuta, e non funziona...  :rolleyes:
Poi, per quanto concerne il tuo suggerimento, parlando di controllo inserimento, avevo inteso ti riferissi a questa riga che di fatto fa in qualche modo il controllo lo fa in tempo reale
Codice: [Seleziona]
TextBox1.Text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
Insomma, cerco di capire perchè se devo rifare qualche cosa di simile vado tranquillo...

Grazie mille del tuo esempio pratico, mi è molto utile.

In riferimento al programma allegato io farei così, togliendo il calcolo da Change a aggiungendo un pulsante e userei Change per controllare il numero intero:
Codice: [Seleziona]
Public Sub ValueBox2_Change()
 
  Dim s As String
 
  s = Right(ValueBox2.Text)
  If s = "," Then
    Message.Warning("Attenzione immettere solo numeri interi", "OK")
    ValueBox2.Value = Int(ValueBox2.value)
  Endif

End

Public Sub Button1_Click()

  ValueBox3.Value = ValueBox1.Value * ValueBox2.Value

End

Circa il mio suggerimento, non era rivolto a quel codice che peraltro ti sconsiglio dall'usare, cambiare il valore introdotto è pratica fuorviante nei confronti dell'utente.
Ti avevo postato l'esempio proprio per meglio spiegarlo.

Titolo: Re:€ con due numeri dopo la virgola
Inserito da: ilfurlan - 11 Febbraio 2017, 21:11:03
Devi fare semplicemente così
Codice: [Seleziona]
Public Sub ValueBox1_Change()
  ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End

Public Sub ValueBox2_Change()
  ValueBox3.Value = ValueBox1.Value * ValueBox2.Value
End


Tu hai usato delle ValueBox impostando per La ValueBox1 e 3 la propietà Currency e per la ValueBox2 la
proprietà Number, quindi i valori che digiti in questi oggetti sono già dei valori numerici che non hai bisogno
di convertire per le operazioni matematiche.

Grazie, grazie, grazie... sei stato molto chiaro, adesso ho capito
Titolo: Re:€ con due numeri dopo la virgola
Inserito da: ilfurlan - 11 Febbraio 2017, 21:15:14
Citazione

Circa il mio suggerimento, non era rivolto a quel codice che peraltro ti sconsiglio dall'usare, cambiare il valore introdotto è pratica fuorviante nei confronti dell'utente.
Ti avevo postato l'esempio proprio per meglio spiegarlo.

Grazie Gianluigi, mentre io mi ripassavo le variabili mi avete aiutato a capire.

Grazie anche a Vuott per le sue dritte.
Titolo: Re:[RISOLTO] € con due numeri dopo la virgola
Inserito da: ilfurlan - 21 Febbraio 2017, 13:23:52
Alla fine, nelle mie sperimentazioni ho fatto così:

Con cinque TextBox

La 1 per l'importo
La 2 per il rincaro
La 3 per l'importo rincarato
La 4 per l'IVA
La 5 per l'importo ivato

Durante la digitazione della valuta, per costringere ad utilizzare solo numeri e/o la virgola, ho utilizzato questo codice:

Codice: [Seleziona]
Public Sub TextBox1_KeyRelease()

  Dim vIntercetta As String

  vIntercetta = TextBox1.Text
  If Val(vIntercetta) Not Val(vIntercetta)
  TextBox1.Text = ""
  Endif

End

Durante la digitazione dei rincari, per costringere ad utilizzare solo numeri interi, ho utilizzato questo codice:

Codice: [Seleziona]
Public Sub TextBox2_KeyRelease()

  Dim vIntercetta As String

  vIntercetta = TextBox2.Text
  If Val(vIntercetta) Not Val(vIntercetta)
  TextBox2.Text = ""
  Endif

  TextBox2.Text = Replace$(TextBox2.Text, ",", "")

End

Per effettuare il calcolo automatico, ho utilizzato questo codice che, per evitare errori nel calcolo:
1) Se i valori sono nulli mette lo zero
2) Toglie il simbolo dell'euro, se presente, per lasciare l'importo "pulito" da simboli
3) Effettua il calcolo ed assegna i valori
4) Riporta tutto al formato valuta aggiungendo il simbolo dell'euro

Codice: [Seleziona]
Public Sub TextBox1_LostFocus()

  If TextBox1.Text = ""
  TextBox1.Text = 0
  Endif
 
  If TextBox2.Text = ""
  TextBox2.Text = 0
  Endif
 
  If TextBox4.Text = ""
  TextBox4.Text = 0
  Endif

  TextBox1.Text = Replace$(TextBox1.Text, "€ ", "")
  TextBox3.Text = Replace$(TextBox3.Text, "€ ", "")
  TextBox5.Text = Replace$(TextBox5.Text, "€ ", "")
  TextBox3.Text = Val(TextBox1.Text) + (Val(TextBox1.Text) / 100 * TextBox2.Text)
  TextBox5.Text = TextBox3.Text + (TextBox3.Text / 100 * TextBox4.Text)
  TextBox1.Text = Format$(Val(TextBox1.Text), "€ 0.00")
  TextBox3.Text = Format$(TextBox3.Text, "€ 0.00")
  TextBox5.Text = Format$(TextBox5.Text, "€ 0.00")

End

In allegato potete provare come funziona tenendo presente che il tasto calcola è solo per uscire "LostFocus()" dalle TextBox

Mi pare carino e abbastanza in linea con le mie aspettative, Voi che ne pensate ?

P.S.

Da Gian.... mi aspetto un voto  :coder: