我想在数组中保存双用户条目,但是我遇到了逗号/点的问题。 当我输入“3,4”时,控制台显示“3,4” - >正确/ 当我输入“3.5”时,控制台显示“34” - >为什么?
static void Main(string[] args)
{
double[] array = new double[3];
bool schleife = true;
while (schleife)
{
try
{
Console.WriteLine("Please enter a Figure");
array[0] = Double.Parse(Console.ReadLine());
schleife = false;
}
catch
{
Console.WriteLine("Error try again");
}
}
Console.WriteLine("Value is: {0}", array[0]);
Console.ReadKey();
}
我的朋友显然没有这些问题....
答案 0 :(得分:1)
您是否检查了运行该应用程序的文化?
另外,您是否可以放置一个断点并检查数组中实际存储的输入是什么?
为什么我要求你验证它?这个问题很可能是一个文化问题,由于不同文化中的格式不同,这些问题确实会使小数和日期变得混乱。
可能在你的文化中,我认为是“de-DE”,例如数字“千和百分之一”写成1.000,01,而在例如文化“en-US”中,同样编号为1,000.01。
使用非预格式化的十进制用户输入时,建议您在应用中定义默认文化。如果你不这样做,它将自动采用它运行的计算机的文化。
这样做非常简单,只需在您的应用中添加以下内容:
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
这将确保您的应用程序始终在所需的文化中运行,并且所有十进制数字都可以正确读取。
当然,您可以将其设置为您想要的任何文化
答案 1 :(得分:1)
我想你来自德国?因为您使用“,”作为小数点。 C#使用您的本地计算机设置来解析数字。因此,“3.5”将被解析为不同于“3,5”。
这是一个常见问题。您可以使用double.Parse("3.5", CultureInfo.InvariantCulture)
用“。”来解析小数。但是这不适用于“,”。
您必须决定使用哪种格式,然后继续使用该格式。
您也可以使用以下方法手动设置分隔符:
var ci = CultureInfo.InvariantCulture.Clone() as CultureInfo;
ci.NumberFormat.NumberDecimalSeparator = ",";
double.Parse("3,5", ci )
答案 2 :(得分:0)
在.Net each culture中有一个NumberFormatInfo
。此数字格式包含NumberDecimalSeparator
和NumberGroupSeparator
。在您的情况下,组分隔符是.
,小数点分隔符是,
。因此,第一个示例在您的文化中正确解析为十进制,而第二个示例被解析为分组数字。
答案 3 :(得分:0)
我会选择:
Double.Parse(Console.ReadLine().replace(",","."), CultureInfo.InvariantCulture) ;
它甚至应该在土耳其工作:D