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

È stato utile?

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;

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