Troncare stringhe dopo carattere scelto

giovedì 24 luglio 2008 - 15.09

attilio Profilo | Junior Member

Salve a tutti vorrei troncare una stringa eliminando tutto quello che è presente dopo una certa posizione.
Come tagliare la stringa non è un problema riesco tranquillamente a dirgli con il remove a togliere tutti i caratteri che voglio a cominciare da una certa posizione.
Per far questo nello specifico ho calcolato la lunghezza della mia stringa e ho eliminato il carattere in più.Il Problema grosso è che io devo iniziare a tagliare e contare i caratteri
usando come punto di partenza il punto all'interno della mia stringa.
esempio 1234.345 vorrei eliminare il terzo carattere dopo il punto.Come posso fare
Spero possiate aiutarmi
Grazie

alexmed Profilo | Guru

Prima prova questo:

Dim indexP As Integer = Me.TextBox1.Text.IndexOf(".")

MsgBox(Me.TextBox1.Text.Remove(indexP + 3))

Ciao

alexmed Profilo | Guru

Ciao dredo,
sono giunto a questa conclusione seguendo gli altri Threads di Attilio
Se ho capito bene a lui non piace come vengono gestiti gli arrotondamenti ed ha bisogno di "troncare" il suo valore a due posizioni dopo il separatore dei decimali quindi, stabilita la posizione del "punto" con IndexOf il "+ 3" è l'inizio del Remove.


Come mai non ti fidi dell'IndexOf?

Ciao

attilio Profilo | Junior Member

Io vorrei utilizzare .IndexOf( per poter calcolare quanti caratteri ci sono dopo la virgola ed eventualmente cancellarne quelli in eccesso ma non riesco a capire come utilizzare il parametro :-(
Help

Lanello Profilo | Senior Member

scusate,

ma perchè vi complicate la vita? quando esiste la funzione SPLIT!!!!

vi faccio un'esempio di utilizzo

Dim a As String, c As String Dim b() As String a = "primo,secondo,terzo" b = Split(a, ",")

le tre variabili risultanti saranno:

a = "primo,secondo,terzo"

b= array con: b(0)="primo" b(1)="secondo" b(2)="terzo"

se vi servisse vi ho messo anche la funzione inversa che è JOIN che unisce gli elementi di un'array di stringhe, dividendo gli elementi con la stringa specificata come secondo argomento

c = Join(b, ";") c="primo;secondo;terzo"


quindi, se il tuo scopo finale è quello di prendere solo quello che viene PRIMA del carattere che indica la divisione della stringa, basterà fare uno split del testo, specificando il carattere, e poi utilizzare SOLTANTO il primo elemento dell'array restituito dalla funzione.



se poi per attilio il problema è quello dell'arrotondamento che non ti soddisfa, quale modo migliore di:

moltiplicare il numero che hai (esempio 123000.43223) per 10 elevato al numero di decimali che vuoi far rimanere (esempio 1 => quindi 10^1=10)
quindi 123000.43223x10 = 1230004.3223, trasformarlo in un numero intero con la funzione cint(numero) quindi diventerebbe 1230004 e ridividerlo infine per la stessa cifra fatta all'inizio (10)
andiamo quindi ad avere il valore 123000.4 voluto come numero di decimali.

se vogliamo tradurre il tutto in una funzione... eccola:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

se per esempio usiamo la funzione così:

MsgBox(Arrotonda(19252.23425, 1))

il nostro risultato sarà: 19252.2

alexmed Profilo | Guru

Di più non zooo!!!

Dim totale As Decimal = 6.15F
Dim percentualeSconto As Decimal = 10

Dim totSconto As Decimal = totale * (1 - (percentualeSconto / 100)) 'Calcoliamo tutto in un passaggio
'Dim tot As Decimal = totale - totSconto 'Questa non serve pù
Me.TextBox1.Text = totSconto.ToString("F3") 'Qui imposto i 3 decimali

Dim indexP As Integer = Me.TextBox1.Text.IndexOf(",") 'Qui trovo la posizione della VIRGOLA

MsgBox(Me.TextBox1.Text.Remove(indexP + 3)) ' Qui gli dico di togliermi tutto quello che c'è due posizioni dopo la virgola

Ciao ciao e buone vacanze!!!!


Volevo anche aggiungere una cosetta:

> ... nel txtTotale.Text mi trovo un valore di 5,54 quando invece sarebbe giusto 5,53 perchè il valore intero è 5,535

Invece è giusto 5,54!!!
Da 1 0 4 si arrotonda per eccesso (5,531; 5,532; 5,533; 5,534;) = 5,53
da 5 a 9 si arrotonda per difetto (5,535; 5,536; 5,537; 5,538;5,539) = 5,54

Infatti 5,531 + 5,531 = 11,062 (arrotondato 11,06)
mentre 5,535 + 5,535 = 11,070 (arrotondato 11,07)

se fosse come dici tu 5,535 + 5,535 = 11,07 ( arrotondato 11,06) ???????????????????????? Non quadra molto





attilio Profilo | Junior Member

Perfetto seguendo i vostri consigli e aggiungendo un controllino IF sembra funzionare tutto correttamente senza errori.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5