elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  c# Ayuda codigo posible error FLOAT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: c# Ayuda codigo posible error FLOAT  (Leído 2,335 veces)
metalost

Desconectado Desconectado

Mensajes: 10


Ver Perfil
c# Ayuda codigo posible error FLOAT
« en: 1 Julio 2016, 22:17 pm »

Buenas estoy empezando a aprender c# estaba con un projecto en el visual estudio de "Console aplication"

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Pag_9_repasando
  8. {
  9.    class Program
  10.    {
  11.        static void Main(string[] args)
  12.        {
  13.            int n, x, sirven;
  14.            float longitud;
  15.            string linea;
  16.            x = 1;
  17.            sirven = 0;
  18.            Console.Write("Ingrese numero de piezas: ");
  19.            linea = Console.ReadLine();
  20.            n = int.Parse(linea);
  21.  
  22.            while (x <= n)
  23.            {
  24.                Console.WriteLine("Ingrese longitud de la pieza");
  25.                linea = Console.ReadLine();
  26.                longitud = float.Parse(linea);
  27.                if (longitud >= 1.20 && longitud <= 1.30)
  28.                {
  29.                    sirven = sirven + 1;
  30.                }
  31.                x = x + 1;
  32.            }
  33.            Console.Write("El numero total de piezas aptas es de: ");
  34.            Console.WriteLine(sirven);
  35.            Console.ReadKey();
  36.        }
  37.    }
  38. }

Necesito ayuda, el programa no me lee el 1.20 cuando lo ejecuto, si en vez de 1.20 y 1.30 colocara valores enteros como 1 y 2 entonces el programa si funciona pero, es como si no me leyera los numeros decimales, me podrian ayudar?

gracias


« Última modificación: 1 Julio 2016, 23:13 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: c# Ayuda codigo posible error FLOAT
« Respuesta #1 en: 1 Julio 2016, 23:13 pm »

Hola.

Antes de nada:
1. Utiliza la etiqueta GeShi para formatear el código. Esto es un foro de programación.
2. Lee las normas del foro de programación.
3. Las preguntas de C# van en el subforo de .NET.



En el idioma Español, se utiliza una coma "," como separador de deciales, no un punto. Esto es importante mencionarlo por que los algoritmos de parsing de formatos de .NET Framework usan las reglas del idioma/cultura actual de la aplicación, y en una aplicación .NET el idioma o cultura por defecto es la misma que la que tenga tu sistema (donde desarrolles la app), es decir, será el idioma Español (es-ES)

Entonces, este bloque de órdenes jamás podrá funcionar como esperas, por que tú estás utilizando el separador de decimales que corresponde al idioma Inglés de EEUU (en-US):
Código
  1. linea = Console.ReadLine();
  2. longitud = float.Parse(linea);
  3. if (longitud >= 1.20 && ...

Así que cuando parseas un número como 1.25, ese número se convierte en un entero, osea que el valor que se le asignará a la variable "longitud" será 125,0.

La solución es simple: utiliza la coma para separar decimales como todo el mundo, o bien cambia la cultura de la aplicación a Inglés.

Puedes cambiar la cultura en las propiedades de tu proyecto, o bien en tiempo de ejecución:
Código
  1. CultureInfo.DefaultThreadCurrentCulture = CultureInfo.GetCultureInfo("en-US");

O también puedes utilizar el overload de la función float.Parse() que toma un parámetro que derive de la interfáz IFormatProvider, el cual sirve para especificar con que formato queremos que se parsee el string:
Código
  1. linea = Console.ReadLine(); // 1.25
  2. longitud = float.Parse(line, NumberStyles.Float, new CultureInfo("en-US").NumberFormat);
  3.  
  4. if ((longitud >= 1.2f) && (longitud <= 1.3f)) {
  5. sirven += 1;
  6. }

Saludos.


« Última modificación: 1 Julio 2016, 23:24 pm por Eleкtro » En línea



metalost

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: c# Ayuda codigo posible error FLOAT
« Respuesta #2 en: 1 Julio 2016, 23:23 pm »

Muchas gracias no sabia, gracias por la ayuda

Estoy intentando las soluciones que dejaste

efectivamente tenia bien escrito el 1.20 en el código pero a la hora de ejecutarlo tenia que colocar 1,20 como todos lo hacen, muchas gracias por la ayuda  :D :D :D

« Última modificación: 1 Julio 2016, 23:38 pm por metalost » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines