Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 05 Settembre 2017, 23:05:53

Titolo: Convertire un numero di tipo Stringa a valore numerico aritmetico
Inserito da: vuott - 05 Settembre 2017, 23:05:53
A parte la funzione " Val( ) " avete un codice più fino del seguente:

Codice: [Seleziona]
Public Sub Main()

  Dim s As String
  Dim bb As Byte[]
  Dim b As Byte
  Dim sg As Short = 1
  Dim i As Integer
 
   s = "   -123456     "
   
   bb = Byte[].FromString(s)
   
   For b = 0 To bb.Max
     If Not IsSpace(Chr(bb[b])) Then     ' Salta gli eventuali spazi iniziali e finali
       If bb[b] = Asc("-") Then sg = -1  ' Verifica se il numero è segnato
       If bb[b] < 48 Then Inc b          ' Se è segnato, incrementa "b"
       i = 10 * i + (bb[b] - Asc("0"))   ' Ricava il valore numerico corrispondente al numero stringa
     Endif
   Next
   
   Print sg * i

End

per convertire un numero segnato di tipo stringa nel corrispondente valore numerico aritmetico (esempio: Intero) ?
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: vuott - 05 Settembre 2017, 23:16:55
Un codice molto simile al precedente:

Codice: [Seleziona]
Public Sub Main()

  Dim s As String
  Dim bb As Byte[]
  Dim b As Byte
  Dim sg As Short
  Dim i As Integer
 
   s = "  123456789    "
   
   bb = Byte[].FromString(s)
   
   While IsSpace(Chr(bb[b]))          ' Salta gli eventuali spazi iniziali
     Inc b
   Wend
   
   sg = IIf(bb[b] = Asc("-"), -1, 1)   ' Verifica se il numero è segnato negativo
   If bb[b] < 48 Then Inc b            ' Se è comunque segnato ("+" "-"), incrementa "b"
   While IsNumber(Chr(bb[b]))
    i = 10 * i + (bb[b] - Asc("0"))    ' Ricava il valore numerico corrispondente al numero stringa
    Inc b
    If b = bb.Count Then Break
   Wend
   
   Print sg * i

End
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: Gianluigi - 06 Settembre 2017, 09:18:11
E così?
Codice: [Seleziona]
Public Sub Main()

  Dim s As String = "   -123456     "
  Dim n As Float

  s = Trim(s)
  If IsNumber(s) Then n = CFloat(s)
  Print n

End
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: Gianluigi - 06 Settembre 2017, 09:50:04
Volendo credo si possa usare anche il casting o per meglio dire la conversione implicita anche se penso che non sia raccomandabile. Ho cercato in merito ma non ho trovato nulla  :-\

Codice: [Seleziona]
Public Sub Main()

  Dim s As String = "   -123456     "
  Dim n As Byte = 6

  s = Trim(s)
  If IsNumber(s) Then Print s + n

End
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: allegfede - 06 Settembre 2017, 16:46:18
per togliere TUTTI gli spazi:
Codice: [Seleziona]
valore=replace(valore," ","")

per convertirlo in numero (float?)
Codice: [Seleziona]
try numeroavirgolamobile=cfloat(valore)
if error then
 message.warning ....
end if
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: Gianluigi - 06 Settembre 2017, 16:59:35
 :ciao: Allegfede,
ma secondo te Vuott sta tentando di riscrivere Gambas in C  ???  ;D
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: kicco - 06 Settembre 2017, 20:05:51
Citazione
Vuott sta tentando di riscrivere Gambas in C
:nono: sta scrivendo C, in Gambas!!! :P
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: allegfede - 07 Settembre 2017, 08:29:52
Si suppongo :-)
Vuole diventare minisini 2 :D

Ps: ma gambas è scritto in c++ vero?
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: Gianluigi - 07 Settembre 2017, 13:43:16
ma gambas è scritto in c++ vero?

Che io sappia sia in C che in C++ e se mi passi il bisticcio di parole, più in C che in C++.
 :ciao:
Titolo: Re:Convertire un numero di tipo Stringa a valore numerico
Inserito da: vuott - 07 Settembre 2017, 15:28:53
" The compiler is a fast little executable written in C
  ......
  The core Gambas interpreter is a terminal-only program. All other features are provided by components, which are groups of classes written in C/C++, or written directly in Gambas.
"

http://gambaswiki.org/wiki/doc/whatisgambas?