Italian Formattare con separat migliaia e virgola decimali (modo italiano)

LucaMs

Expert
Licensed User
Longtime User
in chile il separatore delle migliaia è il punto e il decimale è la virgola
😇😇😇
Adesso si usa in quel modo anche qui ma, almeno fin quando andavo a scuola io (ma anche in seguito), la posizione corretta del punto separatore delle migliaia era in alto.
 

Sabotto

Active Member
Licensed User
Provo a guardarlo al volo, ma tra poco... Belgio - Portogallo.
(Si domandano: "Sarà meglio dover incontrare il Belgio o il Portogallo?". Domanda scema, visto che incontreremo la vincente! Sarebbe meglio incontrare la perdente, ma temo non sia possibile 😄).
Certo. la guardo anche io.. Meglio Portogallo comunque...(imho)
 

LucaMs

Expert
Licensed User
Longtime User
Certo. la guardo anche io.. Meglio Portogallo comunque...(imho)
E' un pronostico difficile.

A me piace molto Bernardo Silva, del Portogallo (scontato dire anche Ronaldo), ma il Belgio ha molti giocatori buoni (Lukaku, De Bruyne, Mertens, il portiere Courtois...), ottima organizzazione, gran fisico e resistenza.

Credo che sul piano del gioco "vincerà" il Belgio; poi esistono anche fortuna e sfortuna, quindi non si può mai dire. Un po' come Italia-Austria, in cui l'Austria ha giocato meglio dell'Italia per il 60% del tempo ma ha perso (se non fosse stato per un alluce austriaco in fuorigioco...! 😄)
 

Omar Parra A.

Expert
Licensed User
Longtime User
prova
B4X:
Public Sub TestFormatter
    Dim out As String
    
    out = out & CRLF & SetFormmatter("12345.678", 2)
    out = out & CRLF & SetFormmatter("3.45", 2)
    out = out & CRLF & SetFormmatter("123", 2)
    out = out & CRLF & SetFormmatter("2456000.3", 2)
    
    Log(out)
End Sub

Public Sub SetFormmatter( Value As String, Decimal As Int) As String
    Dim formatter As B4XFormatter
    formatter.Initialize
    formatter.GetDefaultFormat.GroupingCharacter = "."
    formatter.GetDefaultFormat.DecimalPoint = ","
    formatter.GetDefaultFormat.MaximumFractions = 2
    formatter.GetDefaultFormat.MinimumFractions = 2
    formatter.GetDefaultFormat.Prefix = "$"
    formatter.GetDefaultFormat.IntegerPaddingChar = "*"
    formatter.GetDefaultFormat.MinimumIntegers = 12
    
    Dim Data As Double = Round2(Value.Replace(",","."), 2)
    Return formatter.Format(Data)
End Sub

$******12.345,68
$***********3,45
$*********123,00
$***2.456.000,30
 

Omar Parra A.

Expert
Licensed User
Longtime User
prova
B4X:
Public Sub TestFormatter
    Dim out As String

'    String
    out = out & CRLF & SetFormmatter("12345,678", 2)
    out = out & CRLF & SetFormmatter("3,45", 2)
    out = out & CRLF & SetFormmatter("123", 2)
    out = out & CRLF & SetFormmatter("2456000,3", 2)
    
'    Numeric
    out = out & CRLF & SetFormmatter(12345.678, 2)
    out = out & CRLF & SetFormmatter(3.45, 2)
    out = out & CRLF & SetFormmatter(123, 2)
    out = out & CRLF & SetFormmatter(2456000.3, 2)

    Log(out)
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Questo, in realtà, sarebbe il formato italiano più corretto:

123˙456˙789,13€

con il simbolo di valuta a destra e il punto per le migliaia in alto.

Anzi, veramente sarebbe questo:

123˙456˙789,13£

con il simbolo della povera, vecchia lira £ :)
 

Omar Parra A.

Expert
Licensed User
Longtime User
B4X:
ublic Sub TestFormatter
    Dim out As String

'    String
    out = out & CRLF & SetFormmatter("12345,678", 2)
    out = out & CRLF & SetFormmatter("3,45", 2)
    out = out & CRLF & SetFormmatter("123", 2)
    out = out & CRLF & SetFormmatter("2456000,3", 2)
    
'    Numeric
    out = out & CRLF & SetFormmatter(12345.678, 2)
    out = out & CRLF & SetFormmatter(3.45, 2)
    out = out & CRLF & SetFormmatter(123, 2)
    out = out & CRLF & SetFormmatter(2456000.3, 2)

    Log(out)
End Sub

Public Sub SetFormmatter(Value As String, Decimal As Int) As String
    Dim Formatter As B4XFormatter
    Formatter.Initialize
    Formatter.GetDefaultFormat.GroupingCharacter = "˙"
    Formatter.GetDefaultFormat.DecimalPoint = ","
    Formatter.GetDefaultFormat.MaximumFractions = 2
    Formatter.GetDefaultFormat.MinimumFractions = 2
    Formatter.GetDefaultFormat.Postfix = "£"
    'Formatter.GetDefaultFormat.IntegerPaddingChar = "*"
    'Formatter.GetDefaultFormat.MinimumIntegers = 12
    
    Dim Data As Double = Round2(Value.Replace(",","."), 2)
    Return Formatter.Format(Data)
End Sub


12˙345,68£
3,45£
123,00£
2˙456˙000,30£
12˙345,68£
3,45£
123,00£
2˙456˙000,30£
 

LucaMs

Expert
Licensed User
Longtime User
si ma il mistero dello zip che ho inviato vorrei proprio capirlo.
Due routine uguali, perche una funziona e una no?!?
"Semplicemente" perché nella routine Prova hai:
B4X:
    s2.Replace(",","A") ' sostituisco la virgola con carattere A
    s2.Replace(".","B") ' sostituisco il punto con carattere B
    s2.Replace("A",".") ' sostituisco la A col punto
    s2.Replace("B",",") ' e la B con la virgola
e quelle righe non "sostituiscono..." se non assegni la stringa restituita dalla funzione Replace alla variabile, come invece hai fatto nel codice nell'Activity_Create:
B4X:
    s2=s2.Replace(",","A") ' sostituisco la virgola con carattere A
    s2=s2.Replace(".","B") ' sostituisco il punto con carattere B
    s2=s2.Replace("A",".") ' sostituisco la A col punto
    s2=s2.Replace("B",",") ' e la B con la virgola
 

Star-Dust

Expert
Licensed User
B4X:
   Sub prova()

    Dim s As String ="12345,6789"
    Dim s1 As String = s.Replace(",",".") 'lo rendo numero come lo vuole lui
    Dim s2 As String = NumberFormat2(s1, 0, 2, 2, True) 'separat. migliaia e due decimali

    'A questo punto ho il numero formattato con la virgola come separat. migliaia
    ' e il punto come separat. dei decimali
    'Ma a me serve il contrario e quindi opero una serie di sostituzioni
    '(che mi sono accorto che in realtà non fa!!!!)
    S2=s2.Replace(",","A") ' sostituisco la virgola con carattere A
    S2=s2.Replace(".","B") ' sostituisco il punto con carattere B
    S2=s2.Replace("A",".") ' sostituisco la A col punto
    S2=s2.Replace("B",",") ' e la B con la virgola

    Log(s2) 'non funziona, mi attendevo 12.345,68 ma esce  12,345.68
       
End Sub
l'avevo scritto mezza giornata fa, ma @Sabotto scrive le domande ma non legge le rispo6o quantomeno non lo fa con attenzione
 
Last edited:

Sabotto

Active Member
Licensed User
l'avevo scritto mezza giornata fa, ma @Sabotto scrive le domande ma non legge le rispo6o quantomeno non lo fa con attenzione
Hai ragione, ma non avendo notato l'evidenziazione col colore, pensavo che erroneamente avevi solo ripostato il mio codice. Chiedo scusa, però, come disse Checco Zalone al prete, ("ma tu sei prete?... e miett nu caxx d collett!!!") io ti dico, "e miett nu caxx d comment!!!" ... 😁
 
Top