Autore Topic: [RISOLTO] € con due numeri dopo la virgola  (Letto 714 volte)

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
[RISOLTO] € con due numeri dopo la virgola
« il: 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")

 :'(
« Ultima modifica: 11 Febbraio 2017, 21:15:39 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #1 il: 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.
« Ultima modifica: 09 Febbraio 2017, 18:18:52 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.179
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #2 il: 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.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #3 il: 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  ???
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #4 il: 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:
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #5 il: 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
« Ultima modifica: 09 Febbraio 2017, 22:15:28 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #6 il: 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
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.179
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #7 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.179
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #8 il: 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 ?
« Ultima modifica: 10 Febbraio 2017, 01:34:29 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #9 il: 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
« Ultima modifica: 10 Febbraio 2017, 17:53:00 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #10 il: 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.
Non insegno ma imparo per riportare ad altri il mio sapere.

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #11 il: 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.
« Ultima modifica: 11 Febbraio 2017, 12:24:29 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #12 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #13 il: 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.

nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline ilfurlan

  • Grande Gambero
  • ***
  • Post: 111
    • Mostra profilo
Re:€ con due numeri dopo la virgola
« Risposta #14 il: 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
« Ultima modifica: 11 Febbraio 2017, 21:11:49 da ilfurlan »
Non insegno ma imparo per riportare ad altri il mio sapere.