Differenze tra le versioni di "Conoscere le impostazioni del separatore decimale nel sistema"

Da Gambas-it.org - Wikipedia.
(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...")
 
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per conoscere quale sia il "separatore decimale" in uso in un sistema, è posibile adottare diverse modalità. Ne mostriamo alcune:
+
Per conoscere quale sia il "separatore decimale" (la parte intera da quella decimale) in uso in un sistema, è possibile adottare diverse modalità. Ne mostriamo alcune:
  
 
===1<SUP>a</sup> modalità===
 
===1<SUP>a</sup> modalità===
Mediante l'uso della funzione stringa ''Str()'', la quale nell'effettuare la conversione utilizza la corrente localizzazione per convertire numeri e date.  [<FONT Size=1>[[#Note|nota 1]]</font>]
+
Mediante l'uso della funzione stringa "Str()", la quale nell'effettuare la conversione utilizza la corrente localizzazione per convertire numeri e date.  [<FONT Size=1>[[#Note|nota 1]]</font>]
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
   Dim a as float
+
   Dim f as float
   Dim b as string
+
   Dim s as string
 
    
 
    
  a=5/2  
+
  f = 5/2  
  b=str(a)
+
  s = Str(f)
 
    
 
    
  Print mid(b,2,1)
+
  Print Mid(s, 2, 1)
 +
 +
<FONT Color=gray>' ''oppure:''</font>
 +
  Print s[1]
 +
<FONT Color=gray>' ''oppure più brevemente:''</font>
 +
  Str(f)
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
===2<SUP>a</sup> modalità===
 
===2<SUP>a</sup> modalità===
 
Con l'uso di una variabile di tipo ''Puntatore'':
 
Con l'uso di una variabile di tipo ''Puntatore'':
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
   Dim a As Float   
+
   Dim f As Float   
   Dim b As String
+
   Dim s As String
 
   Dim p As Pointer
 
   Dim p As Pointer
 
    
 
    
  a = 5 / 7
+
  f = 5 / 7
  b = Str(a)   
+
  s = Str(f)   
  p = VarPtr(b)
+
  p = Alloc(s)
 
    
 
    
  <FONT Color=gray>' ''Dereferenziamo il Puntatore leggendo - come valore Byte - solo il 2° valore della originaria stringa.''
+
  <FONT Color=gray>' ''Dereferenzia il Puntatore leggendo - come valore Byte - solo il 2° valore della originaria stringa.''
  ' ''Quindi convertiamo quel valore di tipo Byte nel corrispettivo carattere ASCII:''</font>
+
  ' ''Quindi converte quel valore di tipo Byte nel corrispettivo carattere ASCII:''</font>
  Print Chr(Byte@(p + 1))
+
  Print Chr(Byte@(p + 1))
 +
 +
  Free(p)
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
===3<SUP>a</sup> modalità===
 
===3<SUP>a</sup> modalità===
Mediante un vettore di tipo ''Byte[ ]'':
+
Mediante un vettore di tipo Byte[] e la funzione "Str()":
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
   Dim a As Float
+
   Dim f As Float
 
   Dim bb As Byte[]
 
   Dim bb As Byte[]
 +
 +
  f = 5 / 7
 +
  bb = Byte[].FromString(Str(f))
 +
 
 +
  Print Chr(bb[1])
 +
 
 +
End
 +
 +
 +
===4<SUP>a</sup> modalità===
 +
Estrapolando l'informazione dal file di sistema ''/usr/share/i18n/locales/......'':
 +
Public Sub Main()
 +
 
 +
  Dim locales, lingua, arcloc, sep As String
 +
 +
  locales = "/usr/share/i18n/locales"
 
    
 
    
  a = 5 / 7
+
  lingua = Scan(System.Language, "*.*")[0]
  bb = Byte[].FromString(Str(a))
+
 
+
  arcloc = File.load(locales &/ Dir(locales, lingua, gb.File)[0])
  Print Chr(bb[1])
+
 
+
  sep = Scan(Replace(arcloc, " ", Null), "*decimal_point*\n*")[1]
  '''End'''
+
 +
  Print "Separatore decimale:  "; sep
 +
 +
  End
  
  
 
+
===5<SUP>a</sup> modalità===
===4<SUP>a</sup> modalità===
 
 
Utilizzando un paio di specifiche funzioni esterne della libreria ''/usr/include/locale.h'':
 
Utilizzando un paio di specifiche funzioni esterne della libreria ''/usr/include/locale.h'':
 
  Library "libc:6"
 
  Library "libc:6"
Riga 73: Riga 96:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim lc As New Lconv
 
   Dim lc As New Lconv
 
    
 
    
 
  <FONT Color=gray>' ''Specifichiamo la categoria e l'ambiente dell'impostazione locale per lingua:''</font>
 
  <FONT Color=gray>' ''Specifichiamo la categoria e l'ambiente dell'impostazione locale per lingua:''</font>
  setlocale(LC_NUMERIC, System.Language)
+
  setlocale(LC_NUMERIC, System.Language)
 
      
 
      
 
  <FONT Color=gray>' ''Ritorna un Puntatore alla Struttura che dà informazioni sui simboli numerici secondo l'impostazione locale:''</font>
 
  <FONT Color=gray>' ''Ritorna un Puntatore alla Struttura che dà informazioni sui simboli numerici secondo l'impostazione locale:''</font>
  lc = localeconv()
+
  lc = localeconv()
 
      
 
      
  With lc
+
  With lc
    Print "- Impostazioni locali numeriche -\n\nSeparatore decimale:  "; String@(.decimal_point)
+
    Print "- Impostazioni locali numeriche -\n\nSeparatore decimale:  "; String@(.decimal_point)
    Print "Separatore migliaia:  "; String@(.thousands_sep)
+
    Print "Separatore migliaia:  "; String@(.thousands_sep)
  End With
+
  End With
 
    
 
    
  '''End'''
+
  End
 
 
  
  

Versione attuale delle 15:46, 8 giu 2024

Per conoscere quale sia il "separatore decimale" (la parte intera da quella decimale) in uso in un sistema, è possibile 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 f as float
 Dim s as string
  
 f = 5/2 
 s = Str(f)
  
 Print Mid(s, 2, 1)

' oppure:
 Print s[1]
' oppure più brevemente:
 Str(f)
  
End


2a modalità

Con l'uso di una variabile di tipo Puntatore:

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

 Free(p)
  
End


3a modalità

Mediante un vettore di tipo Byte[] e la funzione "Str()":

Public Sub Main()
 
 Dim f As Float
 Dim bb As Byte[]

 f = 5 / 7
 bb = Byte[].FromString(Str(f))
 
 Print Chr(bb[1])
 
End


4a modalità

Estrapolando l'informazione dal file di sistema /usr/share/i18n/locales/......:

Public Sub Main()
 
 Dim locales, lingua, arcloc, sep As String

 locales = "/usr/share/i18n/locales"
  
 lingua = Scan(System.Language, "*.*")[0]

 arcloc = File.load(locales &/ Dir(locales, lingua, gb.File)[0])

 sep = Scan(Replace(arcloc, " ", Null), "*decimal_point*\n*")[1]

 Print "Separatore decimale:  "; sep

End


5a 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 .