Autore Topic: Convertire un numero di tipo Stringa a valore numerico aritmetico  (Letto 695 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
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) ?
« Ultima modifica: 25 Settembre 2017, 20:05:09 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 vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #1 il: 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
« 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.244
  • Tonno verde
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #2 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #3 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #4 il: 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
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #5 il: 06 Settembre 2017, 16:59:35 »
 :ciao: Allegfede,
ma secondo te Vuott sta tentando di riscrivere Gambas in C  ???  ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #6 il: 06 Settembre 2017, 20:05:51 »
Citazione
Vuott sta tentando di riscrivere Gambas in C
:nono: sta scrivendo C, in Gambas!!! :P
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #7 il: 07 Settembre 2017, 08:29:52 »
Si suppongo :-)
Vuole diventare minisini 2 :D

Ps: ma gambas è scritto in c++ vero?
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #8 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Convertire un numero di tipo Stringa a valore numerico
« Risposta #9 il: 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?
« 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. »