C# 有一个奇怪的行为双重解析字符串输入?
我尝试读取一些excel文件,并转换一些字符串列以保存在db中。但是我面对面地遇到了一些双重解析错误:double result=double.parse(1,15); 结果:1.1499999999。。。。我不想看到这个。我想要double result=double.Parse(1,15);结果=1.15C# 有一个奇怪的行为双重解析字符串输入?,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
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分