2013-04-22 8 views
5

Posso usare Math per il male ... Ma, in un numero scritto come 0.700 ho bisogno di ottenere il "123" - cioè, io è necessario estrarre le ultime 3 cifre nella parte decimale di un numero. Le cifre meno significative, quando i primi sono ciò che la maggior parte delle persone richiede.Ottiene l'ultimo (ovvero endswith) 3 cifre di un decimale (.NET)

Esempi:

0.750-> 123 
0.5150111 -> 111 

Si parte sempre dalla cifra 5. E sì, sto la memorizzazione delle informazioni segrete all'interno di questo numero, nella parte del decimale che non influirà come viene utilizzato il numero - che è la parte potenzialmente malvagia. Ma è ancora il modo migliore per aggirare un certo problema che ho.

Mi chiedo se la matematica o la manipolazione delle stringhe sia il modo meno ambiguo per farlo.

Le prestazioni non sono un problema, poiché la chiamo una volta.

Qualcuno può vedere un modo matematico facile per farlo? ad esempio una combinazione di funzioni matematiche (che ho perso) in .NET?

+1

vorrei convertire il decimale in una stringa e utilizzare la funzione di stringa. Come stai memorizzando il numero? Potresti imbatterti in problemi di arrotondamento. –

+0

Paul, è un decimale, non un doppio. – Joey

risposta

5

E 'una strana richiesta per essere sicuri. Ma un modo per ottenere un valore int delle ultime 3 cifre è in questo modo:

int x = (int)((yourNumber * 10000000) % 1000); 

ho intenzione di indovinare che c'è un modo migliore per ottenere le informazioni che state cercando che è più pulito, ma dato quello che 'ha chiesto, questo dovrebbe funzionare.

+0

Ciò potrebbe causare overflow. –

+0

@StefanSteinegger Certamente - ma i numeri di esempio OPs sembrano implicare valori sub-1.0. Se l'OP utilizza numeri più grandi, è necessario prendere in considerazione l'overflow. – Gjeltema

+0

È vero, non l'ho menzionato ma il numero sarà sempre <= 1.0 – PandaWood

2

Utilizzando modulo ti porterà le ultime 3 cifre:

var d = 0.7000123m; 
d = d * 10000000 % 1000; 

d ora contenere il valore di 123.

+0

Questo non è un decimale. Questo è un doppio. – recursive

+0

evviva, risposta aggiornata. –

+0

Ciò può causare overflow. –

3

Primo Converti Il tuo numero nella stringa.

string s = num.ToString(); 


string s1 = s.Substring(s.Length - 3, 3); 

Ora s1 Contiene Ultimi 3 cifre del numero

0

Prova questo:

string value= "0.1234567"; 
    string lastthreedigit= value.Substring(value.Length - 3); 
Problemi correlati