Differenze tra le versioni di "Strtod ()"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 7: Riga 7:
  
 
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''.
 
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 esere distinte dal simbolo usato in ''locale'', che nel nostro caso è la "''virgola''".
  
 
Vediamo un esempio pratico:
 
Vediamo un esempio pratico:
Riga 22: Riga 23:
 
   Dim p As Pointer
 
   Dim p As Pointer
 
    
 
    
   s = "123456testo 1234 qualsiasi"
+
   s = "123456,0987testo 1234 qualsiasi"
 
   p = Alloc(SizeOf(gb.Byte), Len(s))
 
   p = Alloc(SizeOf(gb.Byte), Len(s))
 
    
 
    
Riga 48: Riga 49:
 
   Dim f As Float
 
   Dim f As Float
 
    
 
    
   s = "123456testo 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( )",''

Versione attuale delle 16:37, 5 feb 2017

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 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.
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, 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