Domanda

Ho un problema, non ho ancora trovato la soluzione, quindi chiedo il tuo aiuto. Nel mio database ho alcuni int, decimali e string che devono essere convertiti in valori numerici con lunghezza e precisione specifiche da includere in un file flat.

es:

integer 123 to numeric(8,0) ==> 00000123
decimal 123,123 to numeric(8,8) ==> 0000012312300000
String "22" to numeric(8,0) ==> 00000022

Non può mettere virgola o punto. C'è una soluzione semplice Provo un sacco di cose, ma nessuna mi darà il mio risultato tranne che fare dei loop foreach Archiviato nel mio file flat troppo sporco !!

EDIT:

il file flat ottiene informazioni in base al punto iniziale e alla lunghezza, quindi tutti i dati che includo nel file devono avere una lunghezza costante. E per il numerico che ho per esempio

   database Decimal Price = 123,456
   File     Numeric(8,6) Price = 00000123456000

Volevo sapere come posso analizzare qualsiasi dato decimale o intero basato su N (, )

È stato utile?

Soluzione

Prova questo:

string ToNumericString(int value) {
    return value.ToString("00000000");
}

string ToNumericString(decimal value) {
    var value16 = Math.Truncate(value * 100000000);
    return value16.ToString("0000000000000000");
}

string ToNumericString(string value) {
    return ToNumericString(int.Parse(value, CultureInfo.InvariantCulture));
}

Per chiamarlo:

    MessageBox.Show(ToNumericString(123));
    MessageBox.Show(ToNumericString(123.123M));
    MessageBox.Show(ToNumericString("22"));

o più generale:

string ToNumericString(decimal value, int digitsBefore, int digitsAfter) {
    var value16 = Math.Truncate(value * (decimal)Math.Pow(10,digitsAfter));
    return value16.ToString(new String('0', digitsBefore + digitsAfter));
}

MessageBox.Show(ToNumericString(123.123M, 8, 3));

Altri suggerimenti

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