Newsgroup: it.comp.appl.access
Titolo: fatturazione elettronica il punto per la separazione dei decimali

volevo chiedervi secondo come potrei ottenere dal classico valore valuta
 
1.347,52 €
 
il valore come richeisto nel file xml in questo modo
 
1347.52
 
quindi senza il punto delle migliaia e con il punto al posto della virgola per i decimali?
grazie a tutti.

Convertendo il numero in stringa cosa accade...?
 
@Alex

Salve,
 
mario rossi:

str()
 
-- 
Ciao
Karl
*********
http://www.AccessDevCon.com
 
Access FAQ: 
http://www.donkarl.com/it
 
 
 
 

Facendo attenzione allo spazio iniziale... se serve... perché a prescindere c'è con Str().
 
@Alex

 @Alex
 
grazie a entrambi quindi bastava usare str()
ci provo grazie.


scusate forse sbaglio qualcosa ho trasformato un 28.000.000,00 € in stringa con str() ma mi restituisce 28000000 senza i decimali e il punto
 
sbaglio qualcosa?


Usando str() e cstr() è evidente non possa soddisfare la tua richiesta.
 
Un NUMERO non ha separatori di MIGLIAIA, ma solo la sua rappresentazione in stringa, un numero ha solo di Decimali... ma quì è da chiarire perchè se i decimali sono 00 viene attuara la soppressione perchè le conversioni sono ottimizzate per risparmiare...
 
Quindi la rappresentazione che hai fornito tu... quella commerciale della Valuta è solo una rappresentazione grafica di una STRINGA conun formato VALUTA di un numero, non è un numero.
Per essere chiari, il numero equivalente a quanto tu hai erroneamente definito numero, ovvero [28.000.000,00€] in realtà è 28000000.00 (ovviamente il separatore decimale dipende dalle impostazioni del S.O.)
 
Magari Karl aveva qualche altra idea...
 
Intanto che aspettiamo, puoi provare a convertire la Valuta in Stringa in modo semplice usando:
 
FormatCurrency
 
Function FormatCurrency(Expression, [NumDigitsAfterDecimal As Long = -1], [IncludeLeadingDigit As VbTriState = vbUseDefault], [UseParensForNegativeNumbers As VbTriState = vbUseDefault], [GroupDigits As VbTriState = vbUseDefault]) As String
    Membro di VBA.Strings
    Formats expression as currency
 
 
Nel tuo caso:
strValuta= FormatCurrency(TuaValuta,2,vbTrue)
 
? FormatCurrency(28000000.00,2,vbTrue)
28.000.000,00 €
 
Saluti
@Alex

P.S.
 
Fai attenzione che queste funzioni sono affette dai REGIONAL SETTINGS... vale a dire che se esegui questa funzione in UK il simbolo dell'€ diventerà la Sterlina...
 
@Alex


aspetta forse non ho capito a me serve ottenere partendo 
dall'importo 28.000.000 € il risultato 28000000.00 in pratica è il formato che mi serve per la fattura elettronica, sarà l'orario e che è tutto il giorno che programmo ma non ho capito se il tuo esempio fà al caso mio o fa il contrario.
 


Se il tuo VALORE di base è [28.000.000 €] già NON E' un NUMERO... ed ancora io non ho capito che TIPO di DATO stai manipolando... puoi essere più chiaro...?
 
Se non è un CURRENCY(VALUTA) hai un problema.
Verifica prima che non sia frutto di una Formattazione... se il campo in cui lo salvi è VALUTA quello che dici è falso, perchè quel formato è solo VISIVO come ti ho detto 45 volte.
 
Alla fine devi usare FORMAT e REPLACE 
 
Se è un Campo di tipo VALUTA puoi usare FORMAT hai tutte le OPZIONI:
 
?Format(28000000,"#,##0.00")
28.000.000,00
 
?Format(28000000,"0.#,0")
28000000,00
 
Il restituito è una STRINGA, quindi come vedi e non hai alternative in quanto la conversione del Char(Separatore decimali) viene fatto così, dovrai applicare un REPLACE...
 
Se NON è un numero, ma una stringa devi sopprimere i SEPARATORI di migliaia e manipolare la parte decimale sostituendo la [,] con il PUNTO, ma se non c'è aggiungere [.00]
 
Sono certo sia un Campo di tipo VALUTA e per questo è bene tu ti chiarisca le cose, mi pare ti sia fatto ingannare da quello che VISUALIZZI...
 
Saluti
@Alex

 dall'importo 28.000.000 € il risultato 28000000.00 in pratica è il formato che mi serve...
 
Come scritto da Alex dipende anche dal tipo e valore del input (p.e. al 
massimo 2 decimali?), ma forse ti serve circa:
 
trim(str(TuoCampo)) & iif(instr(str(TuoCampo),".")=0,".00","")
 
o come espressione in una query:
 
trim(str(TuoCampo)) & iif(instr(str(TuoCampo);".")=0;".00")
 
Siccome è brutta, aspettiamo chi trova qc più elegante. ;-)



ok intanto provo questa grazie.


provata ed ho il seguente problema
se inserisco 22,00 mi restituisce correttamente 22.00
se inserisco 2,20 mi restituisce errato il valore 2.2 anzichè 2.20
 
risolvibile?


Mario hai ricevuto molte indicazioni... tu quale hai usato...?
 
Se usi Format il problema non esiste...
 
@Alex

 Se usi Format il problema non esiste...
 
Certo, se veramente si tratta di un tipo numerico, dovrebbe bastare p.e.
 
Replace(Format(TuoCampo;"0.00");",";".")
 
o forse con separatore comma:
 
Replace(Format(TuoCampo;"0,00");",";".")
 
Il "forse" non solo viene dalle impostazioni regionali di Windows. 
Qualche volta anche è (l'installazione di) Access che fa confusione di 
inglese/altra lingua per i caratteri jolly e separatori di Format(). Ho 
già visto tutti varianti.



ora provo la tua formula io inizialmente pensavo di riuscire a prendere la parte a sinistra delle virgola quindi la parte intera e lavorarla per togliere i punti quindi  28.000.000,2 diventerebbe
 
parte a sinistra 28.000.000 che lavorata diventa 28000000 ovvero senza punti
poi parte a destra della virgola ovvero parte decimale e se inferiore a 10 allora aggiungo uno zero che in questo caso il 2 diveta 20 e poi assemblare il tutto con un bel punto (.) nel messo fra parte intera e decimale
 
ragionamento scorretto e non fattibile?


grande Karl!!!! la prima delle 2 sembra funzionare perfettamente al mio caso
ho provato con i seguenti importi 
€ 28.000,00 e mi ha restituito 28000.00
€ 28.000.000,00 e mi ha restituito 28000000.00
con 22,00 dell'iva e mi ha resituito 22.00
con 4,00 di certa iva e mi ha restituito 4.00
 
 
 
secondo te potrebbe andare in crisi su certi computer con qualche impostazione diversa? considera che i pc su cui eseguo la modifica sono tutti in Italia
 
grazie molte.

Scusa ma ti ho dato le soluzioni ai problemi e Karl ti ha scritto le formule e ribadito Le possibili anomalie con il sistema operativo... Fatico a capire cos'altro bisogna spiegare.
@Alex 

 
 
Di solito funziona se una volta sei riuscito di far funzionare Format() 
soprattutto se si tratta di carattere jolly e separatori inglesi ed il 
codepage non si cambia (cinese, russo ecc.). Gli errori spesso succedono 
quando Access tenta di tradurre qc. in inglese/SQL.
 
Puo darsi che il modo con Str() e la faticosa lavorazione di stringhe 
(come iniziato nel esempio) sarebbe un po più sicuro perché dipende meno 
del sistema e delle circostanze.
 
Però non conosco la tua applicazione, i dati, gli utenti/sistemi ecc. e 
poi se persi 1000000.00... È meglio di subito citare la gente della MS:
 
The information in my post is provided 'AS IS' with no warranties and 
confers no rights. It is solely my own personal opinion. All code 
samples are provided 'AS IS' without warranty of any kind, either 
express or implied, including but not limited to the implied warranties 
of merchantability and/or fitness for a particular purpose.
 
-- 
:-)



access è versione XP i sistemi sono tutti windows 7/10 
e tutti italiani

 e tutti italiani
 
Allora direi che hai risolto...!
 
@Alex


si risolto grazie, devo fare qualcosa al post quando è risolto?


mi inserisco nella discussione
mi par di capire che usi quindi
Replace(Format(TuoCampo;"0.00");",";".")
 
ma cosa succede se il tuocampo vale 12,127 ?
 
 
ciao BFS
 
 
 
---
Questa email è stata esaminata alla ricerca di virus da AVG.
http://www.avg.com
 
 


credo e spero che nei miei gestionali non serva la terza cifra decimale. 


non so che tipologia di clienti hai,
ma non è raro avere tre decimali nel prezzo unitario, anche 4 e anche 5.
Poi se quella funzione la usi anche per le quantità, anche li non è raro 
avere 3 decimali
 
importante che sei consapevole che se il cliente nella fattura scrive 
10,123 e nel file ci finisce 10,12 il file ti verrà scartato perchè i 
conti non tornano
 
ciao
BFS