首页 > 解决方案 > C#中的浮点解析

问题描述

在 C# 中,我在 main() 中声明了一个浮点数组

float[] notas = new float[8];

在 main() 中调用方法并通过引用传递数组

PopulateArray(ref notas);

这是方法 PopulateArray(ref float[] arr1) 的实现

static void PopulateArray(ref float[] arr1)
    {
        bool vakid;

        for (int i = 0; i < arr1.Length; i++)
        {
            do
            {
                do
                {
                    Console.Write($"Insira nota {i + 1}  ==>");
                    vakid = float.TryParse(Console.ReadLine(), out arr1[i]);
                    if ((arr1[i] > 20.0) || (arr1[i] < 0.0))
                    {
                        Console.Write("\n\n\t\tAs notas só vão de 0 a 20\n\nPrima uma tecla para continuar");
                        Console.ReadKey();
                    }
                    Console.Clear();

                }while (!((arr1[i] <= 20) && (arr1[i] >= 0)));

            } while (!vakid); 
        }


    }

使用了两个循环,一个确保输入的值在 [0, 20] 之间,另一个确保任何输入都是十进制数(浮点数)。在此实现之前,数组notas整数,一切正常,只允许整数,并且在 [0, 20] 的区间之间。当我决定将数据类型更改为float时,每当我输入一个十进制数(即 3.0)时,它都不会通过外循环,就像我输入一个数字以外的字符一样,方式与当我输入一个字母。那么如何输入十进制数字以存储在我的数组中?泰

标签: c#parsingtryparse

解决方案


我提出了这个替代实现:

static void PopulateArray(float[] arr1)
{

    for (int i = 1; i <= arr1.Length; i++)
    {
        float nota;

        Console.Write($"Insira nota {i}  ==> \n");

        while(! float.TryParse(Console.ReadLine(), out nota) || nota > 20.0f || nota < 0 )
        {
           // Bad input message
            Console.Write("\n\n\t\tAs notas só vão de 0 a 20\n\nPrima uma tecla para continuar");
        }

        arr1[i] = nota;
    }
}

请注意,您不需要通过引用传递数组。它是一种引用类型,因此传递了引用的副本,并且该方法可以对其进行处理。


推荐阅读