Come rompere un numero in diverse parti in Java?
-
26-09-2019 - |
Domanda
Sto cercando di fare quanto segue: Diciamo che ho un certo numero come 125,625 => Mi piacerebbe essere in grado di dire il mio programma che è di 1 * 100 + 2 * 10 + 5 * 1 + 0.625. Come potrei fare questo favore?
grazie
Soluzione
Se avete il vostro numero come un numero intero, si potrebbe fare qualcosa di simile:
value := 125.625
fractional part := value % 1
value := floor(value)
exponent = 1
listofvaluepairs = array()
while(value > 0)
{
tmp_part := value % 10
listofvaluepairs.add(value, exponent)
exponent = exponent * 10
value = floor(value / 10)
}
Quanto sopra psuedocodarlo riempirà i listofvaluepairs con coppie di cifre e il numero di moltiplicare per. Così si otterrebbe in questo modo:
{{1,100}, {2,10}, {5,1}}
E la parte frazionaria ha quel ultimo pezzo si voleva.
Per riferimento, la funzione floor () darà il numero senza la parte frazionaria, così piano (1.6) dà 1. Il % (modulo) operatore sarà più o meno dare il resto della divisione. Così il 7% 2 = 1.
Quello che faccio nell'esempio di cui sopra (che è molto non java codice), è ottenere uno cifra alla volta dal valore.
Così comincio con 125:
125 % 10 = 5
Then:
floor(125 / 10) = floor(12.5) = 12
Poi ripeto per ottenere 2 e 1. Allo stesso tempo, sto risparmiando 1, 10, e 100 usando la variabile esponente.
Altri suggerimenti
double num = 125.625;
System.out.print(num - (int)num);
num = (int) num;
for (int i=10; num!=0; i*=10) {
System.out.print(" + " + i/10 + " * " + (num % i)/i*10);
num -= num % i;
}
stamperà:
0.625 + 1 * 5.0 + 10 * 2.0 + 100 * 1.0
Naturalmente è possibile modificare il codice per aggiungere roba per una struttura di dati.
È possibile ottenere ogni cifra utilizzando il modulo o %
operatore in un ciclo per i valori interi (cioè .: int ones = myVal % 10
), e per ottenere il valore frazionario do float fraction = val - (int)val;