C# 有一个奇怪的行为双重解析字符串输入?

C# 有一个奇怪的行为双重解析字符串输入?,c#,visual-studio,visual-studio-2010,C#,Visual Studio,Visual Studio 2010,我尝试读取一些excel文件,并转换一些字符串列以保存在db中。但是我面对面地遇到了一些双重解析错误:double result=double.parse(1,15); 结果:1.1499999999。。。。我不想看到这个。我想要double result=double.Parse(1,15);结果=1.15 static void Main(string[] args) { NumberStyles styles; IForm

我尝试读取一些excel文件,并转换一些字符串列以保存在db中。但是我面对面地遇到了一些双重解析错误:double result=double.parse(1,15); 结果:1.1499999999。。。。我不想看到这个。我想要double result=double.Parse(1,15);结果=1.15


 static void Main(string[] args)
        {
            NumberStyles styles;
            IFormatProvider provider;

            styles = NumberStyles.Float;
            provider = CultureInfo.CreateSpecificCulture("tr-TR");

            string test = "1,15";
            double result = double.Parse(test, styles, CultureInfo.CreateSpecificCulture("tr-TR"));
            Console.WriteLine(result.ToString());
        }
    }

您将解析为float,但转换为double——float是不准确的,因此您会看到错误

您的代码应该是:

double result = double.Parse(...);
而不是:

double result = float.Parse(...);

编辑:


旁注:当您将某个内容转换为字符串时,如果希望实现往返,请使用
value.ToString(“R”)
;这将以字符串的形式表示确切的值,而不是截断的值。

您将解析为浮点,但转换为双精度浮点是不准确的,因此您会看到错误

您的代码应该是:

double result = double.Parse(...);
而不是:

double result = float.Parse(...);

编辑:


旁注:当您将某个内容转换为字符串时,如果希望实现往返,请使用
value.ToString(“R”)
;将精确值表示为字符串,不是截断的值。

如果需要高精度数据类型,则对DB和应用程序使用
十进制数据类型。

如果需要高精度数据类型,则对DB和应用程序使用
十进制数据类型。

看起来像代码中的错误:double result=float.Parse();
double.parse()应该可以正常工作。

代码中似乎有错误:double result=float.parse();
double.parse()应该可以正常工作。

double.parse也不准确。但可能错误很小,足以让他注意到。我注意到,
float
实际上很明显,而
double
则不明显。但是,是的,如果他需要十进制类型,二进制本身就不起作用。double.Parse也不准确。但可能错误很小,足以让他注意到。我注意到,
float
实际上很明显,而
double
则不明显。但是是的,如果他需要十进制类型,二进制本身就不起作用。我更改了que,但结果与以前一样,你确定吗?它返回1.15,然后我更改了que,但结果与以前相同,你确定吗?然后返回1点15分