Italian Bug su Andorid 11- numberFormat

Lello1964

Well-Known Member
Licensed User
Longtime User
Ho riscontrato un problema serio su Android 11.

Esempio su Android 9

B4X:
Dim a As Int =0
Log(NumberFormat(a,0,4) )

risultato : 0


su Android 11

risultato .0

un disastro

avete una soluzione
 

Star-Dust

Expert
Licensed User
Longtime User
prova con NumberFormat2 oppure con Log($"$0.4{a}"$)

Non ho Android 11 non posso fare prove in ultimo farei una sub che controlli se inizia con un punto aggiunga lo zero all'inizio.
Comunque quello su Android 11 sembra quello corretto e quello di Android 9 non mi sembra corretto
 

Lello1964

Well-Known Member
Licensed User
Longtime User
E' un grosso problema perchè crasha la app quando va a scrivere nel sqlite.

Ho bisogno che sia 0 e non .0
 

Star-Dust

Expert
Licensed User
Longtime User
E' un grosso problema perchè crasha la app quando va a scrivere nel sqlite.

Ho bisogno che sia 0 e non .0
lo fa solo con zero ?
 

Star-Dust

Expert
Licensed User
Longtime User
Accomoda con questo finchè Erel non risponde

B4X:
Public Sub NumberFormatPlus(Number As Double, MinimumIntegers As Int, MaximumFractions As Int) As String
    If Number=Round(Number) Then
        Return $"$1.0{Number}"$
    Else
        Return NumberFormat(Number,MinimumIntegers,MaximumFractions)
    End If
End Sub
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Accomoda con questo finchè Erel non risponde

B4X:
Public Sub NumberFormatPlus(Number As Double, MinimumIntegers As Int, MaximumFractions As Int) As String
    If Number=Round(Number) Then
        Return $"$1.0{Number}"$
    Else
        Return NumberFormat(Number,MinimumIntegers,MaximumFractions)
    End If
End Sub

Grazie, funziona.
 

Star-Dust

Expert
Licensed User
Longtime User
Numformat2 ha lo stesso problema.

:eek::eek::eek::eek::eek:
Si ma credo sia corretto il funzionamento su Android 11, perchè se metti interi "0" allor anon te ne fa apparire. Dovresti mettere almeno 1 nel numero degli interi

comunque se vuoi gli interi senza virgola fai così
B4X:
Public Sub NumberFormatPlus2(Number As Double, MinimumIntegers As Int, MaximumFractions As Int, MinimumFractions As Int, GroupingUsed As Boolean) As String
    If Number=Round(Number) Then
        Return $"$1.0{Number}"$
    Else
        Return NumberFormat2(Number,MinimumIntegers,MaximumFractions,MinimumFractions,GroupingUsed)
    End If
End Sub
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Grazie ancora,

non so quale sia quello corretto, ma comunque cambia il risultato anche dal punto di vista estetico.

Non è possibile che ci sia una differenza così importante tra le due versioni di Android.
 

udg

Expert
Licensed User
Longtime User
Ciao,
la definizione che si legge per NumberFormat dice:
The string will include at least Minimum Integers and at most Maximum Fractions digits.
Quindi "almeno" Minimum Integers (e tu specifici 0,) e al più Maximu Fractions (e tu specific 4)

In effetti, se consideriamo che "almeno zero interi" si può intendere come zero o più interi, allora dovrebbe ritornare 0, ovvero l'unico intero che fa parte del numero in input. Mentre una parte decimale .0 sarebbe corretta visto che diciamo "al massimo 4 cifre decimali)" e quindi anche una (virtuale) ci può stare.
In pratica dovrebbe rispondere con:
- 0
- 0.0
ma non con .0
 

Star-Dust

Expert
Licensed User
Longtime User
Ciao,
la definizione che si legge per NumberFormat dice:
The string will include at least Minimum Integers and at most Maximum Fractions digits.
Quindi "almeno" Minimum Integers (e tu specifici 0,) e al più Maximu Fractions (e tu specific 4)

In effetti, se consideriamo che "almeno zero interi" si può intendere come zero o più interi, allora dovrebbe ritornare 0, ovvero l'unico intero che fa parte del numero in input. Mentre una parte decimale .0 sarebbe corretta visto che diciamo "al massimo 4 cifre decimali)" e quindi anche una (virtuale) ci può stare.
In pratica dovrebbe rispondere con:
- 0
- 0.0
ma non con .0
Ma cosi se fosse zero interi o 1 intero non cambierebbe il risultato.
 

Star-Dust

Expert
Licensed User
Longtime User
Quindi è un Bug
Anche di Android 9 che ti da 10 anzichè 10.000 visto che hai messo 4 frazionari.

Comunque la Sub funzionerà sia sul 9 che sul 10.
 

Star-Dust

Expert
Licensed User
Longtime User
Le tue funzioni vanno benissimo.
Io di solito se posso evitare di segnalare bug e risolvere da me lo preferisco, anche se alla femminina ma faccio prima.
Perchè poi iniziano le domande ... perchè fai cosi e non pomi? come mai usi questa libreria e non un altra? eccc...
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Questo mi sembra un problema che potrebbe creare differenze nei dati.

Per esempio io converto i numeri in formato italiano e li si scatenano una marea di errori.

La cose secondo me è seria.
 

Star-Dust

Expert
Licensed User
Longtime User
Questo mi sembra un problema che potrebbe creare differenze nei dati.

Per esempio io converto i numeri in formato italiano e li si scatenano una marea di errori.

La cose secondo me è seria.
il formato italiano sarebbe la divisione delle cifre in gruppi di tre? o intendi la virgola al posto del punto
 
Top