Strtod ()

Da Gambas-it.org - Wikipedia.

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