Creo un textbox e scrivo un operazione per esempio:
5+5+10%-1+400-10%
se la scrivo senza risultati mi da il totale ma se la scrivo per calcolare anche le percentuali mi va in errore, quinddi non accetta le le percentuali.
Dim espressione As String
Dim Totale2 As String
espressione = textbox1.Text
Totale2 = Eval(espressione)
label1.text = Totale2
Puoi per cortesia leggere questa guida* e usare il forum come si deve?
Grazie
*
https://www.gambas-it.org/smf/index.php?topic=7397.msg47179#msg47179
Per ottenere una percentuale, ad esempio del 10%, occorre moltiplicare per 0.1
Non comprendo davvero (https://forum.ubuntu-it.org/images/smilies/sbonk.gif) perché usi "Eval()" per la gestione di un'operazione con le percentuali, essendo facilmente gestirle con calcoli, come suggerito da Gianluigi.
TextBox1.Text = "5 * 10 * 20 + 1 / 2"
Print Eval(TextBox1.Text)
Sì, va bene "Eval()":Codice: [Seleziona]TextBox1.Text = "5 * 10 * 20 + 1 / 2"
Print Eval(TextBox1.Text)
Sì, penso che tu debba risolvere la percentuale prima con un calcolo in apposita riga di codice, e poi passare il risultato parziale ad "Eval()". :-\
Mostraci queste formule che hai utilizzato...
Dim Risultato As String
Dim Espressione As String
espressione = "5+1+30*3+(40/100)*100"
Risultato = Eval(Espressione)
Print "Il risultato dell'espressione " & Espressione & " è: " & Risultato
Eh... questo codice funziona.
Dove è invece il problema ? ???
Come vedi, trovando prima la percentuale, in "Eval()" non hai problemi.
Non desidero avventurarmi in "Eval()", poiché io non lo uso mai. quindi in sostanza non lo conosco adeguatamente. :-X
Suppongo che il segno di percentuale non lo supporti, e pertanto non lo comprenda. :-\
Faccio fare i calcoli in modo esplicito, in sostanza.
Gambas pensa lui a svolgere le operazione in base all'ordine di valutazione degli operatori.
Laddove servono le parentesi per separare, ad esempio, il calcolo di una percentuale dal resto, le imponi adeguatamente.
...in che senso ?
Public Sub Main()
Print Eval("((((5+5)*1.1)-1)+400)*0.9") ' risultato corretto
Print Eval("5+5*1.1-1+400*0.9") ' risultato errato
Print Eval("5+5+10%-1+400-10%+1-1") ' risultato errato
End
Rileggi i post di primaeh... se non vuoi o non puoi usare "Eval()", le devi porre in modo esplicito nel codice.
Public Sub Button1_Click()
Button1.Move((Me.W / 2) - (Button1.W * 0.5), (Me.H / 2) - (Button1.H * 0.5))
End
Dim espressione As String
Dim risultato As Float
Dim errore As String
espressione = textbox1.text
' Cerchiamo la percentuale nell'espressione e la sostituiamo con la formula corretta
If InStr(espressione, "%") <> 0 Then
espressione = Replace(espressione, "%", "/100")
End if
' Elaboriamo l'espressione matematica e gestiamo eventuali errori
errore = Error
risultato = Eval(espressione)
If errore = 0 Then
Print "Il risultato dell'espressione è: " & risultato
Else
Print "Errore nell'elaborazione dell'espressione: " & errore
End if
print risultato
If InStr(espressione, "%") <> 0 Then
espressione = Replace(espressione, "%", "/100")
End If
Print espressione
Se nel TextBox inserisco questa operazione:
5+5+10%
e vado a vedere con un Print come viene trasformata dalle seguenti righe del tuo codice:
Codice: [Seleziona]ottengo l'espressione precedente così modificata:If InStr(espressione, "%") <> 0 Then
espressione = Replace(espressione, "%", "/100")
End If
Print espressione
5+5+10/100
...non credo vada bene... :-\
Dim espressione As String
Dim valore As Float
Dim percentuale As Float
Dim valore_con_percentuale As Float
'Dim Segno1 As String
' Chiede all'utente di inserire l'operazione matematica
espressione = InputBox("Inserisci l'operazione matematica che contiene una percentuale:")
If InStr(espressione, "+") > 0 Then
' Estrae il valore e la percentuale dall'operazione matematica
valore = Val(Mid(espressione, 1, InStr(espressione, "+") - 1))
percentuale = Val(Mid(espressione, InStr(espressione, "+") + 1, Len(espressione) - InStr(espressione, "+") - 1))
valore_con_percentuale = valore + (valore * percentuale / 100)
End If
If InStr(espressione, "-") > 0 Then
' Estrae il valore e la percentuale dall'operazione matematica
valore = Val(Mid(espressione, 1, InStr(espressione, "-") - 1))
percentuale = Val(Mid(espressione, InStr(espressione, "-") + 1, Len(espressione) - InStr(espressione, "-") - 1))
valore_con_percentuale = valore - (valore * percentuale / 100)
End If
If InStr(espressione, "*") > 0 Then
' Estrae il valore e la percentuale dall'operazione matematica
valore = Val(Mid(espressione, 1, InStr(espressione, "*") - 1))
percentuale = Val(Mid(espressione, InStr(espressione, "*") + 1, Len(espressione) - InStr(espressione, "*") - 1))
valore_con_percentuale = valore * (valore * percentuale / 100)
End If
If InStr(espressione, "/") > 0 Then
' Estrae il valore e la percentuale dall'operazione matematica
valore = Val(Mid(espressione, 1, InStr(espressione, "/") - 1))
percentuale = Val(Mid(espressione, InStr(espressione, "/") + 1, Len(espressione) - InStr(espressione, "/") - 1))
valore_con_percentuale = valore / (valore * percentuale / 100)
End If
' Calcola la percentuale del valore e visualizza il risultato
' valore_con_percentuale = valore + (valore * percentuale / 100)
Print "Il " & percentuale & "% in più di " & valore & " è " & valore_con_percentuale
Ma il operazioni più complesse ?...mah, forse operando con le funzioni sulle Stringhe:
Tipo
20+40*34%
oppure 56*3-1+12/2*5%
come fare ?
Public Sub Main()
Dim s As String = "56*3-1+12/2*5%"
Dim c As Short
c = Cerca(s)
Select Case s[c]
Case "*", "/"
Print Eval(Left(s, c + 1) & CStr(Val(Mid(s, c + 2, Len(s) - c - 2)) / 100))
Case "+", "-"
Print Eval(Left(s, c + 1) & "((" & Left(s, c) & ")*" & CStr(Val(Mid(s, c + 2, Len(s) - c - 2)) / 100) & ")")
End Select
End
Private Function Cerca(t As String) As Short
Dim c As Short
c = t.Len - 1
Repeat
Dec c
Until IsPunct(t[c])
Return c
End
'Complessa
' Definisci la variabile per l'espressione matematica e il risultato
Dim expression As String
Dim result As Float
' Richiedi all'utente di inserire l'espressione matematica tramite InputBox
expression = InputBox("Inserisci l'espressione matematica:")
expression = textbox1.text
' Aggiungi le parentesi all'espressione
expression = "(" & expression & ")"
' Converti la percentuale in un valore decimale
expression = Replace(expression, "%", "/100")
' Esegui i calcoli
result = Eval(expression)
' Stampa il risultato-
'Print expression
label1.text = result
'Print "Il risultato è: " & result
End
Public Sub Button5_Click()
'Verifica
Dim espressione As String = "10+40+4"
Dim segni As String[] = ["+", "-", "*", "/", "%"]
Dim count As Integer = 0
For Each segno As String In segni
count += InStr(espressione, segno) - 1
Next
If count > 1 Then
' L'operazione contiene più di un segno per gli operatori matematici
End If
Print count
Questo codice funziona con le operazioni complesseSe faccio calcolare questa espressioneCodice: [Seleziona]'Complessa
' Definisci la variabile per l'espressione matematica e il risultato
Dim expression As String
Dim result As Float
' Richiedi all'utente di inserire l'espressione matematica tramite InputBox
expression = InputBox("Inserisci l'espressione matematica:")
expression = textbox1.text
' Aggiungi le parentesi all'espressione
expression = "(" & expression & ")"
' Converti la percentuale in un valore decimale
expression = Replace(expression, "%", "/100")
' Esegui i calcoli
result = Eval(expression)
' Stampa il risultato-
'Print expression
label1.text = result
'Print "Il risultato è: " & result
End
Questo codice funziona con le operazioni complesseSe faccio calcolare questa espressioneCodice: [Seleziona]'Complessa
' Definisci la variabile per l'espressione matematica e il risultato
Dim expression As String
Dim result As Float
' Richiedi all'utente di inserire l'espressione matematica tramite InputBox
expression = InputBox("Inserisci l'espressione matematica:")
expression = textbox1.text
' Aggiungi le parentesi all'espressione
expression = "(" & expression & ")"
' Converti la percentuale in un valore decimale
expression = Replace(expression, "%", "/100")
' Esegui i calcoli
result = Eval(expression)
' Stampa il risultato-
'Print expression
label1.text = result
'Print "Il risultato è: " & result
End
56*3-1+12/2+5%
alla calcolatrice presente nel mio sistema, ottengo questo risultato: 181,65.
Se quella espressione la faccio calcolare dal mio codice, sopra riportato, ottengo questo risultato: 181,65.
Se la faccio calcolare dal tuo codice ottengo questo risultato: 173,05.
Chi sbaglia ? ???
ho provato il codice di Vuott ma spuntano come al solito altri erroriSottolineo che il mio codice prende in considerazione soltanto le espressioni contenenti un solo valore di percentuale.