Cambiare formato Stringa-Numero

lunedì 27 luglio 2009 - 17.38

petitmax Profilo | Newbie

Salve,

ho dei valori in formato stringa che mi vengono restituiti da una query.
Avrei bisogno che questi valori-stringa venissero cambiati di formato.
Mi spiego meglio con la tabellina che segue:
STRINGA VORREI
"0,00" ".00"
"0,59" ".59"
"8,29" "8.29"

Con la funzione Format.String non riesco a ottenere quello che voglio (sicuramente sarò io a utilizzarla male).
Mi aiutate ?

Grazie
Max

Jeremy Profilo | Guru

Ciao Massimiliano.
Prova a vedere se ti basta l'uso del metodo replace di String

Dim Result as string =TuaVariabileString.Replace(",", ".")

Facci sapere....
Ciao

petitmax Profilo | Newbie

Ciao Jeremy,

si l'ho provato...avevo fretta di chiudere l'applicazione e con diversi "accrocchi" sono riuscito a risolvere.

Ma cercavo un metodo più elegante e mi sembrava di averlo trovato con la funzione Strings.Format.

In pratica ho bisogno di sostituire le "," con "." (e questo l'ho fatto usando la replace...come anche tu mi hai suggerito).
Rimane elegantemente irrisolto il caso in cui la parte decimale è = 0.....in quel caso (e solo in quello) lo 0 va omesso.....come dimostrato nella tabellina del mio primo post.

Max

RedStripe Profilo | Newbie

Private Function MyFormat(ByVal xvalue As String) As String
Dim retVal As String = ""
Dim j As Integer = 0
Try

retVal = xvalue
For j = 0 To retVal.LastIndexOf(",")
If retVal.Substring(0, 1) = "0" Then
retVal = retVal.Substring(1, retVal.Length - 1)
j = 0
End If
Next
retVal = retVal.Replace(",", ".")
Catch ex As Exception
'se errore qui
'...
retVal = xvalue
Finally
MyFormat = retVal
End Try
End Function

aiedail92 Profilo | Expert

Ciao

Prova a vedere se questo metodo dà i risultati che cerchi:

string[] inputs = { "0,00", "0,59", "8,29", "123,89", "0000,99", "1,9999", "0" }; string[] outputs = new string[inputs.Length]; NumberFormatInfo enus = CultureInfo.GetCultureInfo("en-us").NumberFormat; NumberFormatInfo itit = CultureInfo.GetCultureInfo("it-it").NumberFormat; for (int i = 0; i < inputs.Length; i++) { outputs[i] = double.Parse(inputs[i], itit).ToString("#.00##", enus); } StringBuilder outp = new StringBuilder(); for (int i = 0; i < inputs.Length; i++) { outp.Append(inputs[i]); outp.Append(" --> "); outp.AppendLine(outputs[i]); } MessageBox.Show(outp.ToString());

Se vuoi fermarti alle due cifre decimali, arrotondando quello che segue, puoi sostituire "#.00##" con "#.00"

P.S: L'aggiungo anche in VB dato che ho visto ora che in altri post usavi quel linguaggio:

Dim inputs() As String = {"0,00", "0,59", "8,29", "123,89", "0000,99", "1,9999", "0"} Dim outputs(inputs.Length) As String Dim enus As NumberFormatInfo = CultureInfo.GetCultureInfo("en-us").NumberFormat Dim itit As NumberFormatInfo = CultureInfo.GetCultureInfo("it-it").NumberFormat For i As Integer = 0 To inputs.Length - 1 outputs(i) = Double.Parse(inputs(i)).ToString("#.00##", enus) Next Dim outp As New StringBuilder For i As Integer = 0 To inputs.Length - 1 outp.Append(inputs(i)) outp.Append(" --> ") outp.AppendLine(outputs(i)) Next MsgBox(outp.ToString())

Luca

petitmax Profilo | Newbie

Grazie a entrambi.
Le proverò entrambe e vi faccio sapere come sono andati i tentativi.

Grazie
Max

erongis Profilo | Junior Member

Hai provato le funzioni "convert"?

Puoi scrivere convert.tosingle(espressioneTesto)

Dovrebbe funzionare.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5