C# 在另一台计算机上将文本转换为双精度文本失败
我在电脑上运行这部分代码。操作系统为Windows 10 EnterpriseC# 在另一台计算机上将文本转换为双精度文本失败,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
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.r226fr.fr
区域性是一个给定区域性不接受0.7598
作为有效数字的示例。如果Win服务器区域性不是“fr fr”?@m.r226-它不必是“fr fr”,这只是一个示例,它可以是具有的任何区域性,
作为小数分隔符-如果您不信任我们,请使用windows的计算器,计算1/2
(1
除以2
)-它是否在您的Windows上返回0,5
或0.5
server@m.r226fr.fr
文化是给定文化不接受0.7598
作为有效数字的一个示例。