Pascal/Turbo Pascal - Guardar float con 1 solo decimal? con strtofloat no lo consigo

 
Vista:
sin imagen de perfil
Val: 86
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por David (37 intervenciones) el 28/04/2020 09:21:01
Quisiera que si alguien introduce 5,73 se almacene en la variable 5,7.
Quisiera que empiece siendo un string para poder validar que la entrada es numérica.
¿Sabéis como puedo hacerlo?

He probado StrToFloat sin éxito.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//5,5 lo guarda como 5.500000000E+00 = correcto
//6,6 lo guarda como 6.599999905E+00 = No es lo que buscaba.
 
program Project1;
 
 
uses crt, sysutils;
 
var
  	respuesta : char = 'S';
    numero_string : string;
	numero : single;
 
begin
	while (respuesta <> 'N') do
    begin
		clrscr();
  		writeln('pon la nota: ');
  		readln(numero_string);
    	numero := StrToFloat(numero_string);
  		writeln('la nota es: ', numero);
        writeln('Dandole formato a la salida: ', numero:0:1);
  		writeln('');
  		write('quieres continuar? S/N ');
  		respuesta := upcase(readkey());
	end;
 
 
end.
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

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por Nacho (13 intervenciones) el 28/04/2020 12:28:32
Al trabajar con floats hay que tener bien claro que se codifican como un exponente y una mantisa, con lo que no hay número de decimales, y que, como no pueden codificarse todos los valores, se guarda el más aproximado. Si pasas a float la cadena 5,7 y el float a cadena puede salirte un 5,699999999 o un 5,7000000001.

Si lo que quieres es que no se pase a float una cadena con más de un decimal lo que tienes que hacer es no dejar al usuario meter más decimales que uno o dejarle que meta los que sea y cortar los que sobren en la propia cadena. Y para pasar ese float a cadena, lo mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 86
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por David (37 intervenciones) el 28/04/2020 13:16:45
Muchas gracias por la explicación, aunque me temo que no entiendo lo de mantisa pero no te precoupes :S
Al pasar float a cadena el problema es el que tu me explicas, puede que si meto 5,7 me guarde 5,6 o 5,7

Lo que me gustaría es que la persona introduzca un string para asegurarme que son números y sea 7 o 7,3 lo almacene como 7,0 o 7,3
¿no hay ningún tipo de variable que sea así?, o una forma de convertir una cadena a un entero con un decimal?
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
sin imagen de perfil
Val: 86
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por David (37 intervenciones) el 28/04/2020 13:40:31
vale, creo que lo tengo claro, aunque si muestro el real como tal y aparece esa "matisa" luego al volverlo a converitr para imprimir el número conversa su valor. Gracias.
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

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por Nacho (13 intervenciones) el 28/04/2020 13:56:33
Si metes un 1000 en un float se va a guardar en la memoria un 10 como mantisa y un 3 como exponente, dado que 10 elevado a la 3 es 1000.

Para lo que quieres hacer no necesitas un float. Puedes usar un integer y lo divides entre 10 al operar con él y le pones una , antes del último dígito para mostrarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 86
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por David (37 intervenciones) el 28/04/2020 21:14:15
Lo que pasa que no puedo usar StrToInt con algo tipo "7,5" o "7.5" porque parece que da error. Si manipulo la cadena para quitarselo, sí, podría almacenarlo como Int, y luego volvérsela a poner. Muchas gracias por la ayuda.
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

Guardar float con 1 solo decimal? con strtofloat no lo consigo

Publicado por Nacho (13 intervenciones) el 28/04/2020 21:19:30
Claro, StrToInt transforma una cadena en Integer, y 7,5 no es una cadena que represente un Integer.
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