C# 在另一台计算机上将文本转换为双精度文本失败

C# 在另一台计算机上将文本转换为双精度文本失败,c#,type-conversion,double,C#,Type Conversion,Double,我在电脑上运行这部分代码。操作系统为Windows 10 Enterprise using System; using System.Collections.Generic; using System.IO; using System.Linq; static void Main(string[] args) { string text_double = "0.7598"; string message = "Using double.Parse(): "; try

我在电脑上运行这部分代码。操作系统为Windows 10 Enterprise

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

static void Main(string[] args)
{
    string text_double = "0.7598";
    string message = "Using double.Parse():   ";
    try
    {
        double confidence = double.Parse(text_double);
        message += text_double + " Converted To " + confidence;
    }
    catch (Exception ex)
    {
        message += ex.Message;
    }
    Console.WriteLine(message);

    message = "Using Convert.ToDouble:   ";
    try
    {
        double confidence = Convert.ToDouble(text_double);
        message += text_double + " Converted To " + confidence;
    }
    catch (Exception ex)
    {
        message += ex.Message;
    }

    Console.WriteLine(message);
    Console.ReadKey();
    return;
}
在我的电脑上运行可执行文件将返回预期结果:

Using double.Parse():   0.7598 Converted To 0.7598
Using Convert.ToDouble:   0.7598 Converted To 0.7598
但当我在运行Win Server 2012数据中心的另一台计算机上运行可执行文件时,它总是返回错误,如下所示:

Using double.Parse():   input string was not in a correct format
Using Convert.ToDouble:   input string was not in a correct format
我的Windows服务器有什么问题

[补充]:

我从评论中意识到我的Windows服务器具有不同的文化,但是 当需要在另一台电脑上运行代码时,我不想更改代码。可能还有其他具有不同文化背景的电脑


是否存在独立的区域性?

这可能是由于服务器上的区域性造成的

例如,对于区域性
fr fr
0.7598
不是有效数字。 而对于
us EN
则是

以下操作将产生与您描述的相同的错误:

string text_double = "0.7598";
System.Globalization.CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
var d = Convert.ToDouble(text_double); // <- throws
string text\u double=“0.7598”;
System.Globalization.CultureInfo.CurrentCulture=CultureInfo.CreateSpecificCulture(“fr”);

var d=Convert.ToDouble(文本);// 这可能是由于服务器上的区域性造成的

例如,对于区域性
fr fr
0.7598
不是有效数字。 而对于
us EN
则是

以下操作将产生与您描述的相同的错误:

string text_double = "0.7598";
System.Globalization.CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
var d = Convert.ToDouble(text_double); // <- throws
string text\u double=“0.7598”;
System.Globalization.CultureInfo.CurrentCulture=CultureInfo.CreateSpecificCulture(“fr”);

var d=Convert.ToDouble(文本);// 问题在于某些国家/地区的其他计算机区域性设置中,十进制分隔符不是“.”而是“,”,这就是引发异常的原因

解决方案是在解析值时传递
CultureInfo.InvariantCulture

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

static void Main(string[] args)
{
    string text_double = "0.7598";
    string message = "Using double.Parse():   ";
    try
    {
        double confidence = double.Parse(text_double, CultureInfo.InvariantCulture);
        message += text_double + " Converted To " + confidence;
    }
    catch (Exception ex)
    {
        message += ex.Message;
    }
    Console.WriteLine(message);

    message = "Using Convert.ToDouble:   ";
    try
    {
        double confidence = Convert.ToDouble(text_double, CultureInfo.InvariantCulture);
        message += text_double + " Converted To " + confidence;
    }
    catch (Exception ex)
    {
        message += ex.Message;
    }

    Console.WriteLine(message);
    Console.ReadKey();
    return;
}

对MSDN文档的引用:,

问题来自某些国家/地区的其他计算机区域性设置十进制分隔符不是“.”而是“,”,这就是引发异常的原因

解决方案是在解析值时传递
CultureInfo.InvariantCulture

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

static void Main(string[] args)
{
    string text_double = "0.7598";
    string message = "Using double.Parse():   ";
    try
    {
        double confidence = double.Parse(text_double, CultureInfo.InvariantCulture);
        message += text_double + " Converted To " + confidence;
    }
    catch (Exception ex)
    {
        message += ex.Message;
    }
    Console.WriteLine(message);

    message = "Using Convert.ToDouble:   ";
    try
    {
        double confidence = Convert.ToDouble(text_double, CultureInfo.InvariantCulture);
        message += text_double + " Converted To " + confidence;
    }
    catch (Exception ex)
    {
        message += ex.Message;
    }

    Console.WriteLine(message);
    Console.ReadKey();
    return;
}

对MSDN文档的引用:,

区域性是不同的-如果十进制分隔符是
而不是
@RandRandom是正确的,您应该使用
不变量区域性和
TryParse
。可能重复@m.r226,因为您的电脑没有
作为小数分隔符…。@m.r266-关于您的更新-您必须澄清您的输入将是什么-它是否总是这种格式
0.7598
-我的意思是,在任何其他计算机上它永远不可能是任何其他格式?-如果是这样,那么只需使用
CultureInfo.InvariantCulture
-您不必为每台计算机更改代码。此区域性
CultureInfo.InvariantCulture
在任何计算机上都是相同的,并将
指定为十进制分隔符或区域性不同-其中十进制分隔符是
而非
@RandRandom是正确的,您应该使用
不变量文化
TryParse
。可能重复@m.r226,因为您的电脑没有
作为小数分隔符…。@m.r266-关于您的更新-您必须澄清您的输入将是什么-它是否总是这种格式
0.7598
-我的意思是,在任何其他计算机上它永远不可能是任何其他格式?-如果是这样,那么只需使用
CultureInfo.InvariantCulture
-您不必为每台计算机更改代码此区域性
CultureInfo.InvariantCulture
在任何计算机上都是相同的,并将
指定为十进制分隔符,或者如果Win服务器区域性不是“fr”@m.r226-它不必是“fr-fr”这只是一个例子,任何文化都可以使用
作为小数点分隔符-如果您不信任我们,请使用windows计算器计算
1/2
1
除以
2
)-它是否在您的Windows上返回
0,5
0.5
server@m.r226
fr.fr
区域性是一个给定区域性不接受
0.7598
作为有效数字的示例。如果Win服务器区域性不是“fr fr”?@m.r226-它不必是“fr fr”,这只是一个示例,它可以是具有
的任何区域性,
作为小数分隔符-如果您不信任我们,请使用windows的计算器,计算
1/2
1
除以
2
)-它是否在您的Windows上返回
0,5
0.5
server@m.r226
fr.fr
文化是给定文化不接受
0.7598
作为有效数字的一个示例。