C#区域设置混乱

时间:2012-01-10 06:49:44

标签: c# regions

它的全部是双重,浮点数和分隔符。所以我的问题是:我总是通过点分隔符获得双倍值。如果我将它转换为字符串,我会得到逗号。如果我将它改回双倍,它会再次得到点。在这里添加一些代码:

    data = Convert.ToDouble(read.ReadSingle()); // converts to -70.00
    Conv = Convert.ToString(data); // converts to -70,00 string
    laikinas[k, m] = double.Parse(Conv);  // and in array I'll get 70.00. 

我确信区域设置一切都很好。我可以看到当前的CurrentCulture。

顺便说一句,我改变了区域设置,而我是半个项目。

1 个答案:

答案 0 :(得分:10)

double既没有点也没有逗号;它存储在一些内部表示中。当您查看时,例如,通过Visual Studio调试器,您会看到一些字符串表示形式(Visual Studio选择使用的那个)。此字符串表示无关紧要,仅出于调试目的而显示。

如果您将双重转换为字符串,可以选择使用的数字格式:

  • Convert.ToString(Double)相当于Double.ToString(),它使用基于您当前文化的小数分隔符 - 因此,在使用Convert.ToString时,您会获得逗号(在您的系统上)

  • 如果您使用其他方法进行转换,例如Double.ToString(IFormatProvider),则可以指定要用作参数的区域性设置。例如,myDouble.ToString(CultureInfo.InvariantCulture) 总是使用点作为小数点分隔符,与用户的区域设置无关。