根据操作系统编号形成

本文关键字:编号 操作系统 | 更新日期: 2023-09-27 18:01:48

我使用。net 3.5框架与c#我的应用程序将在世界范围内使用。(Windows 7, 64位)

我有一个双/浮点数,后来转换成字符串。但在不同的操作系统上它会改变值比如46.57变成46,57

我怎样才能阻止这一切?.NET可以内部处理这个问题吗?

下面是我的代码;
Decimal lon = Convert.ToDecimal(dt.Rows[j]["lon"]);    
Decimal lat = Convert.ToDecimal(dt.Rows[j]["lat"]);    
lon = lon / 100000;    
lat = lat / 100000;    
string longitude = Convert.ToString(lon);    
string latitude = Convert.ToString(lat);

根据操作系统编号形成

正如其他人所解释的,这是默认的和期望的行为。

您可以使用InvariantCulture始终以相同的格式输出:

string longitude = Convert.ToString
                   ( lon
                   , System.Globalization.CultureInfo.InvariantCulture
                   );

十进制值的字符串表示形式是特定于区域性的。

Convert.ToString(decimal)方法使用当前培养线程。

是这样实现的;

public static string ToString(decimal value)
{
     return value.ToString(CultureInfo.CurrentCulture);
}

可能你的一个操作系统使用.作为NumberDecimalSeparator的文化,而另一个操作系统使用,作为NumberDecimalSeparator的文化。

我怎样才能阻止这一切?.NET是否可以在内部处理这个问题?

。NET不能处理这个。它使用它找到的任何内容作为当前文化。

但是你可以。

在你的两个操作系统中使用相同的文化线程可以解决这个问题,或者你可以使用CultureInfo.Clone方法克隆你当前的文化并设置你的NumberDecimalSeparator属性你想要的任何字符串

差异是每个机器/操作系统上的文化的函数。我建议您更明确地使用ToString()转换。如果没有这些参数,你就只能让。net为你做决定了。例如:

string longitude = lon.ToString("G", new CultureInfo("en-US"));

您可以在这里找到更多有效转换的示例