C#区域设置混乱

本文关键字:混乱 设置 区域 | 更新日期: 2023-09-27 18:20:03

这一切都是关于双精度、浮点数和分隔符的。所以我的问题是:我总是得到双值的点分隔符。如果我把它转换成字符串,我得到逗号。如果我把它改回双倍,它就会再次变为点。在此处添加一些代码:

    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的本质。

顺便说一句,我在做一个半成品的项目时更改了区域设置。

C#区域设置混乱

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

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

  • Convert.ToString(Double)相当于Double.ToString(),它使用基于当前区域性的十进制分隔符——因此,当使用Convert.ToString时,您可以获得逗号(在系统中)。

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