我在C#中使用.NET 3.5框架 我的申请将在全球范围内使用。 (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);
答案 0 :(得分:5)
正如其他人所解释的那样,这是默认和期望的行为。
您可以使用InvariantCulture
始终以相同的格式输出:
string longitude = Convert.ToString
( lon
, System.Globalization.CultureInfo.InvariantCulture
);
答案 1 :(得分:2)
十进制值的字符串表示形式是特定于文化的。
Convert.ToString(decimal)
方法使用当前的文化线程。
这是怎样的implemented;
public static string ToString(decimal value)
{
return value.ToString(CultureInfo.CurrentCulture);
}
可能您的某个操作系统使用.
为NumberDecimalSeparator
的文化,另一个使用,
为NumberDecimalSeparator
的文化。
我怎么能阻止这个? .NET可以在内部处理吗?
.NET无法处理这个问题。它使用它作为当前文化所发现的任何东西。
但你可以。
在两个操作系统中使用相同的文化主题可以解决此问题,或者您可以使用CultureInfo.Clone
method克隆当前的文化,并将NumberDecimalSeparator
属性设置为您想要的字符串。
答案 2 :(得分:0)
差异是每台机器/操作系统上文化的一个功能。我鼓励你使用ToString()转换更明确。如果没有这些参数,您可以将它留给.NET来为您做出决定。例如:
string longitude = lon.ToString("G", new CultureInfo("en-US"));
您可以找到更多有效转化的示例here。