Differenze tra le versioni di "Strtod ()"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 2: Riga 2:
 
  double strtod (const char *__restrict __nptr, char **__restrict __endptr)
 
  double strtod (const char *__restrict __nptr, char **__restrict __endptr)
 
converte un numero, rappresentato in una stringa, in un valore di tipo ''double'' del C, corrispondente nel tipo ''Float'' di Gambas.
 
converte un numero, rappresentato in una stringa, in un valore di tipo ''double'' del C, corrispondente nel tipo ''Float'' di Gambas.
 +
  
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C ''libc.so.6'', nella quale la funzione è contenuta:
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C ''libc.so.6'', nella quale la funzione è contenuta:
 
  Private <FONT color=#B22222>Extern strtod</font>(__nptr As String, __endptr As Pointer) As Float In "<FONT color=#B22222>libc:6</font>"
 
  Private <FONT color=#B22222>Extern strtod</font>(__nptr As String, __endptr As Pointer) As Float In "<FONT color=#B22222>libc:6</font>"
 
+
Passata al primo parametro della funzione "strtod()" una stringa di caratteri alfanumerico, se detta stringa comincia a sinistra per uno o più caratteri ''numerici'', la funzione esterna restituirà - come valori di tpo ''Float'' - la parte numerica a sinistra. in tal caso, se al secondo parametro è stato passato è un ''Puntatore di Puntatore'' (che ovviamente richiede l'allocazione di adeguata quantità di memoria), la restante parte della stringa verrà memorizzata nell'area di memoria puntata da tale variabile di tipo ''Puntatore''.
Passata al primo parametro della funzione ''strtod( )'' una stringa di caratteri alfanumerico, se detta stringa comincia a sinistra per uno o più caratteri ''numerici'', la funzione esterna restitirà - come valori di tpo ''Float'' - la parte numerica a sinistra. in tal caso, se al secondo parametro è stato passato è un ''Puntatore di Puntatore'' (che ovviamente richiede l'allocazione di adeguata quantità di memoria), la restante parte della stringa verrà memorizzata nell'area di memoria puntata da tale variabile di tipo ''Puntatore''.
+
<BR>La parte intera e quella decimale del numero, rappresentato nella stringa e che sarà ritornato come valore di tipo ''Float'', devono essere distinte dal simbolo usato in ''locale'', che nel nostro caso è la "''virgola'' ".
<BR>La parte intera e quella decimale del numero, rappresentato nella stringa e che sarà ritornato come valore di tipo ''Float'', devono esere distinte dal simbolo usato in ''locale'', nel nostro caso dalla virgola.
 
  
 
Vediamo un esempio pratico:
 
Vediamo un esempio pratico:
Riga 17: Riga 17:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
  Dim s As String
+
  Dim s As String
  Dim f As Float
+
  Dim f As Float
  Dim p As Pointer
+
  Dim p As Pointer
 
    
 
    
 
   s = "123456,0987testo 1234 qualsiasi"
 
   s = "123456,0987testo 1234 qualsiasi"
Riga 33: Riga 33:
 
   Free(p)
 
   Free(p)
 
    
 
    
  '''End'''
+
  End
 
 
 
Se il secondo parametro è posto a 0 (zero), allora la funzione ''strtod( )'' restituirà la sola parte di tipo ''Float''.
 
Se il secondo parametro è posto a 0 (zero), allora la funzione ''strtod( )'' restituirà la sola parte di tipo ''Float''.
 
<BR>Esempio pratico:
 
<BR>Esempio pratico:
Riga 44: Riga 43:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
  Dim s As String
+
  Dim s As String
  Dim f As Float
+
  Dim f As Float
 
    
 
    
 
   s = "123456,0987testo 1234 qualsiasi"
 
   s = "123456,0987testo 1234 qualsiasi"
 
    
 
    
  <FONT Color=gray>' ''Passando il valore "zero" (default) come secondo argomento della funzione "strtod( )",''
+
  <FONT Color=gray>' ''Passando il valore "zero" (default) come secondo argomento della funzione "strtod()", viene restituita la sola parte numerica della stringa convertita in "Float":''</font>
' ''viene restituita la sola parte numerica della stringa convertita in "Float":''</font>
 
 
   f = <FONT color=#B22222>strtod</font>(s, <FONT color=#B22222>0</font>)
 
   f = <FONT color=#B22222>strtod</font>(s, <FONT color=#B22222>0</font>)
 
    
 
    
 
   Print "Parte 'Float': "; f
 
   Print "Parte 'Float': "; f
 
    
 
    
  '''End'''
+
  End
 
 
  
  

Versione attuale delle 16:13, 16 giu 2024

La funzione strtod(), dichiarata nel file header "/usr/include/stdlib.h'" come segue:

double strtod (const char *__restrict __nptr, char **__restrict __endptr)

converte un numero, rappresentato in una stringa, in un valore di tipo double del C, corrispondente nel tipo Float di Gambas.


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C libc.so.6, nella quale la funzione è contenuta:

Private Extern strtod(__nptr As String, __endptr As Pointer) As Float In "libc:6"

Passata al primo parametro della funzione "strtod()" una stringa di caratteri alfanumerico, se detta stringa comincia a sinistra per uno o più caratteri numerici, la funzione esterna restituirà - come valori di tpo Float - la parte numerica a sinistra. in tal caso, se al secondo parametro è stato passato è un Puntatore di Puntatore (che ovviamente richiede l'allocazione di adeguata quantità di memoria), la restante parte della stringa verrà memorizzata nell'area di memoria puntata da tale variabile di tipo Puntatore.
La parte intera e quella decimale del numero, rappresentato nella stringa e che sarà ritornato come valore di tipo Float, devono essere distinte dal simbolo usato in locale, che nel nostro caso è la "virgola ".

Vediamo un esempio pratico:

Library "libc:6"

' double strtod (const char *__restrict __nptr, char **__restrict __endptr)
' Convert a string to a floating-point number.
Private Extern strtod(__nptr As String, __endptr As Pointer) As Float


Public Sub Main()
 
  Dim s As String
  Dim f As Float
  Dim p As Pointer
 
  s = "123456,0987testo 1234 qualsiasi"
  p = Alloc(SizeOf(gb.Byte), Len(s))
  
  f = strtod(s, p)
  
' Per poter leggere la sola parte alfanumerica (a destra) della stringa, è necessario dereferenziare il Puntatore di Puntatore:
  Print "Parte 'Float': "; f; "\nRestante parte di tipo 'String': "; String@(Pointer@(p))
  
  Free(p)
  
End

Se il secondo parametro è posto a 0 (zero), allora la funzione strtod( ) restituirà la sola parte di tipo Float.
Esempio pratico:

Library "libc:6"

' double strtod (const char *__restrict __nptr, char **__restrict __endptr)
' Convert a string to a floating-point number.
Private Extern strtod(__nptr As String, __endptr As Pointer) As Float


Public Sub Main()
 
  Dim s As String
  Dim f As Float
 
  s = "123456,0987testo 1234 qualsiasi"
  
' Passando il valore "zero" (default) come secondo argomento della funzione "strtod()", viene restituita la sola parte numerica della stringa convertita in "Float":
  f = strtod(s, 0)
  
  Print "Parte 'Float': "; f
  
End


Riferimenti