Domanda

Sto mantenendo un'app per un client che viene utilizzata in due posizioni.Uno in Inghilterra e uno in Polonia.

Il database è archiviato in Inghilterra e utilizza il formato £ 1.000,00 per la valuta, ma le informazioni vengono raccolte localmente in Polonia, dove il formato è 1.000,00.

La mia domanda è: in VB6 esiste una funzione che accetta una stringa di valuta in un formato locale e la converte in un altro, oppure dovrò semplicemente analizzare la stringa e sostituire , o .?

A proposito, ho guardato CCur, ma non sono sicuro che farà quello che voglio.

È stato utile?

Soluzione

I dati non vengono effettivamente archiviati come stringa "£1000.00";è memorizzato in un formato numerico.

Barra laterale: Di solito i database sono impostati per archiviare importi di denaro utilizzando il file decimale tipo di dati (chiamato anche soldi in alcuni DB) o come numero in virgola mobile (chiamato anche Doppio).

La differenza è che quando viene archiviato come decimale alcuni numeri come 0,01 sono rappresentati esattamente mentre in Doppio tali numeri possono essere memorizzati solo in modo approssimativo, causando errori di arrotondamento.

La banca dati appare per memorizzare il numero come "£1000.00" perché qualcosa lo sta formattando per la visualizzazione.In VB6 c'è una funzione FormatCurrency che richiederebbe un numero come 1000 e restituirebbe una stringa come "£1000.00".

Noterai che il FormatCurrency la funzione non accetta un argomento che specifica quale tipo di valuta utilizzare.Questo perché, insieme a tutte le altre funzioni specifiche della locale in VB, calcola la valuta dalla locale corrente del sistema (dal Pannello di controllo di Windows).

Ciò significa che sul mio sistema,

Debug.Print FormatCurrency(1000)

stamperà $1,000.00, ma se eseguo lo stesso programma su un computer Windows impostato sulla locale del Regno Unito, probabilmente verrà stampato £1,000.00, che, ovviamente, è qualcosa di completamente diverso.

Allo stesso modo, c'è un codice, da qualche parte, non so dove, in Polonia, a quanto pare, che è responsabile dell'analisi della stringa dell'utente e della sua conversione in un numero.E se quel codice è in Visual Basic, di nuovo, si basa sul pannello di controllo per decidere se "." o "," è il separatore migliaia e se "," o "." è il punto decimale.

La funzione CDbl converte il suo argomento in un numero.Quindi, ad esempio, sul mio sistema negli Stati Uniti

Debug.Print CDbl("1.200")

produce il numero uno punto due, su un sistema con il Pannello di controllo impostato sulla formattazione europea, produrrebbe il numero milleduecento.

È possibile che il problema sia che tu abbia qualcuno seduto un computer con il pannello di controllo regionale impostato ". Come separatore decimale, ma sono digitando ", come il separatore decimale.

Altri suggerimenti

che database stai usando?E in che tipo di dati è memorizzata la quantità?

Finché ti converti sempre da un formato a un altro, non è necessario fare alcuna analisi, basta sostituire "." con "," o viceversa.Potrebbe essere necessario rimuovere anche il segno "£" se è memorizzato nella stringa.

Probabilmente c'è una risposta corretta che riguarda oggetti culturali e simili, ma il modo più semplice sarebbe prendere l'input dall'input polacco e sostituire , con un ., e quindi memorizzarlo nel database come tipo "money" o "decimal ".Se sai che (possibilmente configurabili per utente) inseriscono sempre numeri in polacco o inglese, potresti avere una funzione attraverso la quale eseguire tutti i numeri di input per convertire la stringa in una variabile di tipo "decimale" corretta.Inoltre, a scopo di visualizzazione, potresti eseguirlo tramite un'altra funzione simile per garantire che l'utente veda sempre il formato numerico con cui si sente a proprio agio.La chiave qui è trasformarlo in un decimale non appena lo ricevi dall'utente e riportarlo in una stringa solo nell'ultimo passaggio prima di inviarlo all'utente.

@KiwiBastard sì, lo penserei.Stai memorizzando l'importo in un campo "(n)varchar" o stai utilizzando un campo di tipo valuta/decimale?In quest'ultimo caso, i simboli di valuta e i separatori verranno aggiunti dal tuo cliente e non ci sarebbe bisogno di sostituire nulla nel database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top