¿Cómo romper un número en diferentes partes de Java?
-
26-09-2019 - |
Pregunta
Estoy buscando para hacer lo siguiente: Digamos que tengo un número como 125.625 => Me gustaría ser capaz de decirle a mi programa que es de 1 * 100 * 10 + 2 + 5 * 1 + 0,625. ¿Cómo podría hacer eso por favor?
gracias
Solución
Si usted tiene su número como un entero, se podría hacer algo como esto:
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)
}
El psuedocode anteriormente llenará el listofvaluepairs con pares de la dígitos y el número de multiplicar por. Así se obtendría la siguiente:
{{1,100}, {2,10}, {5,1}}
Y la parte fraccionaria tiene la última pieza que quería.
Para referencia, la función floor () dará el número sin la parte fraccional, por lo piso (1.6) da 1. La % (módulo) operador será más o menos dar el resto después de la división. Así 7% 2 = 1.
Lo que hago en el ejemplo anterior (que es en gran medida no código de Java), es conseguir uno dígito a la vez a partir del valor.
Así que empiezo con 125:
125 % 10 = 5
Then:
floor(125 / 10) = floor(12.5) = 12
A continuación, repito para obtener 2 y 1. Al mismo tiempo estoy ahorrando 1, 10 y 100 utilizando la variable exponente.
Otros consejos
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;
}
Imprimirá:
0.625 + 1 * 5.0 + 10 * 2.0 + 100 * 1.0
Por supuesto, puede cambiar el código para agregar material a una estructura de datos.
Se puede obtener cada dígito utilizando el operador de módulo o %
en un bucle para los valores enteros (es decir .: int ones = myVal % 10
), y para obtener el valor fraccional hacer float fraction = val - (int)val;