根据操作系统编号

时间:2014-05-05 13:11:34

标签: c# formatting decimal

我在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);

3 个答案:

答案 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