C/Visual C - duda sobre float

 
Vista:

duda sobre float

Publicado por domis (1 intervención) el 16/06/2002 17:31:46
Hola a todos.
Tengo un pequeño problema con float, supuestamente float sirve para trabajar con numeros enteros con decimales, pero cuando ejecuto un programa que pasa de euros a pesetas y viceversa siempre me salen decimales aunque estos no existan. Seguidamente voy a poner el codigo fuente del programa y un ejemplo sobre lo que hablo:

#include <stdio.h>

float euros;
float pesetas;
char opcion;

int main()
{
system("clear");
printf("A-) De Euros a pesetas \n");
printf("B-) De Pesetas a Euros \n\n");

printf("¿ que opcion deseas ? ");
scanf("%c",&opcion);

opcion=toupper(opcion); // pasamos el caracter insertado en el scanf de opcion a mayusculas

// PASAMOS DE EUROS A PESETAS

if (opcion=='A')
{
printf("\nInserta la cantidad en Euros: ");
scanf("%f", &euros);
printf("\n%f Euros son %f pesetas\n\n",euros,euros*166.386);
}

// PASAMOS DE PESETAS A EUROS

if (opcion=='B')
{
printf("\nInserta la cantidad en Pesetas: ");
scanf("%f", &pesetas);
printf("\n%f Pesetas son %f Euros\n\n",pesetas,pesetas/166.386);
}

}

Bien ahora supongo que ejecutamos el programa y nos saldria lo siguiente:

A-) De Euros a pesetas
B-) De Pesetas a Euros

¿ que opcion deseas ? b ------= elijo la opcion b por ejemplo.

Inserta la cantidad en Pesetas: 1000 -----= quiero pasar 1000 pesetas a euros

1000.000000 Pesetas son 6.010121 Euros

---= aqui esta el problema ¿ por que me salen 1000.000000 en vez de 1000 ? ¿ existe alguna forma de quitar todos los ceros que estan despues del punto, lo digo porque yo he insertado como valor 1000 , no 1000.000000 , ademas este numero no tiene decimales, puesto que es entero.

Un saludo a todos y a cuidarse :-)

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda sobre float

Publicado por Joel Rosental R. (2 intervenciones) el 16/06/2002 20:28:30
Ok fijate lo siguiente, si tu declaras una variable tipo "float" ella _siempre_ que la utilizes va a guardar parte decimal, por ejemplo si tu vas a inicializar una variable acumuladora o contadora como prefieras llamarla, tipo float y haces lo siguiente:

contador = 0;

Ella internamente no se esta inicializando con 0, sino con 0.000000.
Para lo que quieres hacer, necesitas usar un "cast":

printf("\n%f Pesetas son %f Euros\n\n",(int) pesetas,pesetas/166.386);

Esto te seriviria, pero entonces cuando coloques una cantidad de Pesetas con decimales, por ejemplo 914.56 el te mostraria solo la parte entera, en este caso 914, pero para efectos del cálculo del monto en Euros la parte decimal no se pierde, cosa que si pasa si declararas "pesetas" como int.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre float

Publicado por Ismael (230 intervenciones) el 17/06/2002 08:05:23
Los valores float son imprimidos con seis decimales:
float x = 1000;
printf(""x = %f", x) //imprime 1000.000000
Para resolver esto y eliminar os ceros redundantes, pon
printf("x = %g", x);

El formato %g elimina los ceros nosignificativos.
Ademas del cast, puedes redondear con las funciones floor() y ceil() de math.h
Saludos
Ismael

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda sobre float

Publicado por Armando (127 intervenciones) el 17/06/2002 13:53:56
Al imprimir los valores puedes truncar la parte decimal

valor= 21.99800

printf("Valor = %.1f",valor); //te da 21.9

si quieres quitar todos los decimales usa %.0f
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar