问题描述
我正在使用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
将.
用作小数点,并将,
用作小数点分隔符。