Il driver ODP ADO.NET restituisce il decimale con zero aggiuntivo nella rappresentazione di stringa

StackOverflow https://stackoverflow.com/questions/1807285

Domanda

Il problema di oggi è il seguente: abbiamo una tabella in un database Oracle. La tabella contiene un campo del tipo Numero (18, 3).

In superficie, sia il salvataggio che il caricamento dei dati da detto campo funzionano perfettamente. Tuttavia, un'ulteriore ispezione rivela che i numeri che contengono tre cifre decimali, ad es. 500,001, vengono letti dal database in modo tale che la rappresentazione di stringa del decimale abbia una quarta cifra zero (ad es. 500.0010). Questo sembra accadere ogni volta che la terza cifra decimale è diversa da zero.

A scopo matematico, questo non è un problema. Tuttavia, disponiamo di validatori che verificano il numero di cifre decimali in un numero decimale convertendolo in una stringa e quindi contando il numero di cifre decimali. Poiché si definisce che questo particolare dato abbia al massimo tre cifre decimali, lo zero aggiuntivo provoca un errore di convalida.

Dato che non riesco a cambiare i validatori, mi chiedo se esiste un modo pulito per ottenere il decimale senza lo zero aggiuntivo, oltre a convertire il numero in una stringa, tagliare gli zero finali e quindi analizzare nuovamente vero? O dovrei fare qualcosa di completamente diverso?

È stato utile?

Soluzione

Prova questo:

decimal trimmed = ((decimal)((int)(number * 1000))) / 1000

Il casting in int elimina la parte frazionaria. Non hai bisogno di tutte le parentesi ma penso che sia più facile vedere cosa sta succedendo se l'ordine delle operazioni è esplicitamente indicato.

Altri suggerimenti

Ho riscontrato lo stesso problema ma ho usato: number.ToString("F3")

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