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.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
Log(s2) 'non funziona, mi attendevo 12.345,68 ma esce 12,345.68
End Sub
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
Beh, ora lo scrivo in una funzioncina con B4J e poi magari cerco tra i 10.000 progettini in quale usare il metodo migliore.
A frappè.
Public Sub Inverti(Num As Double, MinIntegers As Int, MaxFractions As Int, MinFractions As Int, Grouping As Boolean) As String
Dim strNum As String = NumberFormat2(Num, MinIntegers, MaxFractions, MinFractions, Grouping)
strNum = strNum.Replace(",", "°")
strNum = strNum.Replace(".", ",")
strNum = strNum.Replace("°", ".")
Return strNum
End Sub
Sì, era qualcosa di simile, ma funzionante solo per Android (rilevava i vari segni separatori in base al "locale" e anche il simbolo di valuta, ricordo).dovrei cercare (forse usai AHLocale o simili).
Pare che funzioni:Ovviamente non ho avuto tempo per testarla. Inoltre, meglio dargli un nome più decente.
Sub Button1_Click
Dim Value As Double = 1234567.89
Log(NumberFormat2(Value,1, 2, 2, True))
Log(InvertiSegniSeparatori(Value, 1, 2, 2, True))
End Sub
Public Sub InvertiSegniSeparatori(Num As Double, MinIntegers As Int, MaxFractions As Int, MinFractions As Int, Grouping As Boolean) As String
Dim strNum As String = NumberFormat2(Num, MinIntegers, MaxFractions, MinFractions, Grouping)
strNum = strNum.Replace(",", "°")
strNum = strNum.Replace(".", ",")
strNum = strNum.Replace("°", ".")
Return strNum
End Sub
Public Sub InvertiSegniSeparatori(Num As Double, MinIntegers As Int, MaxFractions As Int, MinFractions As Int, Grouping As Boolean) As String
Dim strNum As String = NumberFormat2(Num, MinIntegers, MaxFractions, MinFractions, Grouping)
Return strNum.Replace(",", "°").Replace(".", ",").Replace("°", ".")
End Sub
Dim strValue As String = "12345,678" ' questa stringa deve diventare "12.345,68"
In quale formato è la tua stringa originale, "anglosassone"? O sono 678 millesimi - formato "italiano"?Non hai letto attentamente credo. Io ho una stringa che rappresenta un numero. E' questa stringa che voglio visualizzare con il formato migliaia e due decimali
Per riprendere il tuto codice, deve essere
Tu invece, col tuo esempio, sei partito da un numero con il punto "1234567.89"B4X:Dim strValue As String = "12345,678" ' questa stringa deve diventare "12.345,68"
Ok, ma ora sono curioso: parti da stringhe "all'italiana"?Fermi tutti. Ho provato in B4J la mia routine e funziona. Ho riprovato con B4A e funziona anche li!!. E perche prima no?
Ora riprovo nel programma dove avevo iniziato a fare le prove, dove non mi funzionava, perche come detto non faceva le sostituzioni con i vari replace.
Dim value As String = "12345,6789"
Dim data As Double = Round2(value.Replace(",","."), 2)
Dim formatter As B4XFormatter
formatter.Initialize
formatter.GetDefaultFormat.GroupingCharacter = "."
formatter.GetDefaultFormat.DecimalPoint = ","
Log(data)
Log(formatter.Format(data))
12345.68
12.345,68
Sub Button1_Click
Dim strValue As String = "12345,678"
Log(InvertiSegniSeparatoriStr(strValue, 1, 2, 2, True))
End Sub
Public Sub InvertiSegniSeparatori(Num As Double, MinIntegers As Int, MaxFractions As Int, MinFractions As Int, Grouping As Boolean) As String
Dim strNum As String = NumberFormat2(Num, MinIntegers, MaxFractions, MinFractions, Grouping)
Return strNum.Replace(",", "°").Replace(".", ",").Replace("°", ".")
End Sub
Public Sub InvertiSegniSeparatoriStr(Num As String, MinIntegers As Int, MaxFractions As Int, MinFractions As Int, Grouping As Boolean) As String
' NOTA: usa InvertiSegniSeparatori.
Dim Dbl As Double = Num.Replace(",", "°").Replace(".", ",").Replace("°", ".")
Return InvertiSegniSeparatori(Dbl, MinIntegers, MaxFractions, MinFractions, Grouping)
End Sub
Parto da stringhe cosi:Ok, ma ora sono curioso: parti da stringhe "all'italiana"?
Cmq... non mi sto muovendo
Quindi stai partendo da stringhe "all'italiana". Perciò vanno bene le mie routine ma anche quelle di @oparra che, usando una libreria B4X, è meglio usare.Parto da stringhe cosi:
"12345,678" deve diventare 12.345,68
"3,45" --> 3,45
"123" --> 123,00
2456000,3" --> 2.456.000,30
formatter.GetDefaultFormat.MaximumFractions = 2Parto da stringhe cosi:
"12345,678" deve diventare 12.345,68
"3,45" --> 3,45
"123" --> 123,00
"2456000,3" --> 2.456.000,30
Ho riprovato nel vecchio progetto e non funziona (la stessa identica routine). Cambia solo che la prima prova funzionante l'ho fatta con B4A usando i un activity e dove non funziona uso le B4xPages. Possibile che dipenda da questo....?
Comunque dopo testo anche la routine di @oparra
E cerco di lasciare solo la routine nella b4xpage dove non mi funziona devo capire dove si impalla
Dim formatter As B4XFormatter
formatter.Initialize
formatter.GetDefaultFormat.GroupingCharacter = "."
formatter.GetDefaultFormat.DecimalPoint = ","
formatter.GetDefaultFormat.MaximumFractions = 2
formatter.GetDefaultFormat.MinimumFractions = 2
Dim value As String = "12345.678"
Dim data As Double = Round2(value.Replace(",","."), 2)
Log(data)
Log(formatter.Format(data))
Dim value As String = "3.45"
Dim data As Double = Round2(value.Replace(",","."), 2)
Log(data)
Log(formatter.Format(data))
Dim value As String = "123"
Dim data As Double = Round2(value.Replace(",","."), 2)
Log(data)
Log(formatter.Format(data))
Dim value As String = "2456000.3"
Dim data As Double = Round2(value.Replace(",","."), 2)
Log(data)
Log(formatter.Format(data))
12345.68
12.345,68
3.45
3,45
123
123,00
2456000.3
2.456.000,30
Questo dovrebbe essere migliore e più divertente!B4XFormatter
B4X:Dim value As String = "12345,6789" Dim data As Double = Round2(value.Replace(",","."), 2) Dim formatter As B4XFormatter formatter.Initialize formatter.GetDefaultFormat.GroupingCharacter = "." formatter.GetDefaultFormat.DecimalPoint = "," Log(data) Log(formatter.Format(data))
Dim value As String = "123456789,12899"
Dim data As Double = Round2(value.Replace(",","."), 2)
Dim formatter As B4XFormatter
formatter.Initialize
formatter.GetDefaultFormat.GroupingCharacter = "˙"
formatter.GetDefaultFormat.DecimalPoint = ","
Log(formatter.Format(data))
Provo a guardarlo al volo, ma tra poco... Belgio - Portogallo.Esco pazzo. Nello stesso progetto, la stessa routine una volta funziona e un'altra no.
Guardate se ne avete voglia. sono 4 righe...
in chile il separatore delle migliaia è il punto e il decimale è la virgolaQuesto dovrebbe essere migliore e più divertente!
This one should be better and... fun!
perché, almeno in Italia, quando le cose funzionavano bene, il separatore delle migliaia era un punto in alto, non in basso.B4X:Dim value As String = "123456789,12899" Dim data As Double = Round2(value.Replace(",","."), 2) Dim formatter As B4XFormatter formatter.Initialize formatter.GetDefaultFormat.GroupingCharacter = "˙" formatter.GetDefaultFormat.DecimalPoint = "," Log(formatter.Format(data))
because, at least in Italy, when things worked right, the thousands separator was a dot up, not down.
Log:
123˙456˙789,13
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?