El problema se encuentra en los errores de redondeo al trabajar con numeros de punto flotante.
Cuando se guarda un numero de punto flotante, al contrario de los numeros enteros, en realidad es una aproximacion al numero verdadero, esto es debido a que no es posible guardar de manera exacta un numero de punto flotante cualquiera con un numero limitado de bits.
En el caso del numero 0.07, internamente se guarda como el numero 0.070000000000000007, que como podras ver no es exactamente 0.07, si tu utilizas cout para desplegar y comprobar el numero veras 0.07, porque el cout tambien te redondea los decimales, para poder ver el numero real que se guarda internamente en la memoria es necesario utilizar el manipulador fixed.
Te dejo a continuacion el programa modificado, usando fixed, para que puedas ver los errores en el redoneo:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double numero;
int potencia10 =1;
do{
cout << "Ingrese Numero: ";
cin >> numero;
}while(numero < 0);
cout.precision(20);
cout << fixed << numero << endl;
while(floor(numero) != numero){
numero = numero*10;
cout << fixed << numero << endl;
potencia10 = potencia10 * 10;
}
cout << "Hay que multiplicarlo por " << potencia10;
cout << " Para que sea un numero entero" << endl;
return 0;
}
Como nota adicional, no podemos evitar los errores de redondeo, solo podemos minimizarlos
Saludos