Convierta de dólares a centavos
On febrero 14, 2021 by adminEstoy tratando de usar la función redonda para pasar de dólares a centavos, pero creo que hay algo sobre la función redonda que tengo mal entendido, porque simplemente no obtengo los decimales cuando multiplico por 100 desde el flotador hasta un int. Este es el código en cuestión
#include <stdio.h> #include <cs50.h> #include <math.h> int main(void) { int owed = 0; printf("Enter the owed amount: "); do { owed = GetFloat(); } while (owed < 0); owed = owed * 100.0; float owe = roundf(owed); owe = (int)owe;
Comentarios
- i wasn ' No sé cómo redondearlo Estaba usando round () no roundf () ¿podrías explicarme por favor
Responder
El principal problema es cómo está almacenando el valor recuperado inicial. Está llamando a GetFloat()
y almacenando el resultado en owed
, una variable de tipo int. GetFloat () devuelve un número de punto flotante, que se convertirá implícitamente como un int cuando intente almacenarlo en owed. En el proceso, la parte del punto decimal se truncará. Eso significa que podría intentar almacenar 4.85 todo el día y siempre se almacenará como entero 4.
Debe almacenar el valor devuelto por GetFloat () en una var flotante, no en una int. Luego, multiplique por 100 y redondee y luego guárdelo en un int, como está tratando de hacer.
Como nota al margen, las últimas líneas, mientras funcionan , no son terriblemente limpios. Creas un nuevo flotador para modificar lo que debería ser otro flotador y almacena el resultado, y en la siguiente línea, lanza un flotador a un int y almacena el int de nuevo en un flotador. para redondear el flotador y almacenarlo nuevamente en el mismo flotador, pero en la siguiente línea para convertir el flotador como un int y almacenarlo en una nueva, int var. O, algo más limpio sería hacerlo todo en una línea: int change = roundf(dollars*100);
Si esto responde a su pregunta, haga clic en la marca de verificación para aceptar. Sigamos con el mantenimiento del foro. 😉
Comentarios
- ¿Cómo podría perderme eso? Muchas gracias. Mi código terminó luciendo terrible después de 3 horas de jugar con la función redonda, no puedo ' creer que podría cometer un error tan estúpido;)
- Podría ser que yo sea muy exigente, pero debes mantenerte alejado de la Transmisión implícita y siempre usar Transmisión explícita hace que sea mucho más obvio tanto para el compilador como para los futuros programadores lo que está tratando de hacer realmente. Es un muy buen hábito comenzar temprano en su programación, ya que será una segunda naturaleza y le ahorrará muchos dolores de cabeza (y hará un código mucho mejor). int change = (int) (roundf (dólares * 100));
Deja una respuesta