Conoscere le impostazioni del separatore decimale nel sistema

Da Gambas-it.org - Wikipedia.
Versione del 1 mag 2016 alle 16:37 di Vuott (Discussione | contributi) (Creata pagina con "Per conoscere quale sia il "separatore decimale" in uso in un sistema, è posibile adottare diverse modalità. Ne mostriamo alcune: ===1<SUP>a</sup> modalità=== Mediante l'u...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Per conoscere quale sia il "separatore decimale" in uso in un sistema, è posibile adottare diverse modalità. Ne mostriamo alcune:

1a modalità

Mediante l'uso della funzione stringa Str(), la quale nell'effettuare la conversione utilizza la corrente localizzazione per convertire numeri e date. [nota 1]

Public Sub Main()
 
 Dim a as float
 Dim b as string
  
  a=5/2 
  b=str(a)
  
  Print mid(b,2,1)
  
End


2a modalità

Con l'uso di una variabile di tipo Puntatore:

Public Sub Main()
 
 Dim a As Float  
 Dim b As String
 Dim p As Pointer
  
  a = 5 / 7
  b = Str(a)   
  p = VarPtr(b)
 
' Dereferenziamo il Puntatore leggendo - come valore Byte - solo il 2° valore della originaria stringa.
' Quindi convertiamo quel valore di tipo Byte nel corrispettivo carattere ASCII:
  Print Chr(Byte@(p + 1))
  
End


3a modalità

Mediante un vettore di tipo Byte[ ]:

Public Sub Main()
 
 Dim a As Float
 Dim bb As Byte[]
  
  a = 5 / 7
  bb = Byte[].FromString(Str(a))
  
  Print Chr(bb[1])
  
End


4a modalità

Utilizzando un paio di specifiche funzioni esterne della libreria /usr/include/locale.h:

Library "libc:6"

Public Struct Lconv
  decimal_point As Pointer
  thousands_sep As Pointer
End Struct

Private Const LC_NUMERIC As Integer = 1

' char *setlocale (int __category, const char *__locale)
' Set and/or return the current locale.
Private Extern setlocale(category As Integer, locale As String) As Pointer

' struct lconv *localeconv(void)
' Return the numeric/monetary information for the current locale.
Private Extern localeconv() As Lconv


Public Sub Main()
 
 Dim lc As New Lconv
 
' Specifichiamo la categoria e l'ambiente dell'impostazione locale per lingua:
  setlocale(LC_NUMERIC, System.Language)
   
' Ritorna un Puntatore alla Struttura che dà informazioni sui simboli numerici secondo l'impostazione locale:
  lc = localeconv()
   
  With lc
    Print "- Impostazioni locali numeriche -\n\nSeparatore decimale:  "; String@(.decimal_point)
    Print "Separatore migliaia:  "; String@(.thousands_sep)
  End With
  
End



Note

[1] Codice proposto dal membro Akrobaticone del forum gambas-it.org .