如何在C#中显示浮点值?

问题描述

我正在使用c#中的结构,当我想显示学生的平均成绩(如“ 4.53”)时,它会显示“ 453”。这是代码

using System;
using System.Buffers;

namespace Struct
{
    struct student
    {
        public string name,surname;
        public float average;
    }

    class Program
    {
        static void Main(string[] args)
        {
            student[] arr = new student[3];
            for (int i = 0; i < 2; i++)
            {
                Console.Write("name {0}. - ",i + 1);
                arr[i].name = Console.ReadLine();
                Console.Write("surname {0}. - ",i + 1);
                arr[i].surname = Console.ReadLine();
                Console.Write("average {0}. - ",i + 1);
                arr[i].average = float.Parse(Console.ReadLine());
            }

            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("{0} {1} - {2}",arr[i].name,arr[i].surname,arr[i].average);
            }
        }
    }
}

我也尝试过:

Console.WriteLine(string.Format("{0} {1} - {2:.0#}",arr[i].average));

但是它不起作用。

解决方法

arr[i].average = float.Parse(Console.ReadLine());

您看到的警告不仅是为了展示,还试图向您解释为什么您编写的代码客观上是错误的。

具体来说,您正在读取一个人写的浮点值,该人未根据其居住的国家正确地写数字。

由于您未提供此信息,因此假设您在提示中写了2.15,您所在的国家/地区希望将浮点数写为2,15,并在其中输入.是小数点分隔符。在这种情况下,average字段将获得值215,该值根据您的本地化规则是正确的。

您忽略的警告提示了一种可能的解决方案:自己指定一种区域性信息类型,以防与系统区域性信息不匹配,而一种可能的区域性始终是不错的默认设置,CultureInfo.InvariantCulture.用作小数点,并将,用作小数点分隔符。