根据操作系统编号形成
本文关键字:编号 操作系统 | 更新日期: 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"));
您可以在这里找到更多有效转换的示例