Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分析导致奇怪十进制值的浮点_C#_Parsing_Floating Point - Fatal编程技术网

C# 分析导致奇怪十进制值的浮点

C# 分析导致奇怪十进制值的浮点,c#,parsing,floating-point,C#,Parsing,Floating Point,我试图将一个小数点后两位的字符串解析为浮点 问题是,结果对象的尾数不正确。 由于这与我的预期相差甚远,我很难相信这是一个四舍五入的问题 然而,双倍似乎有效 这个值似乎在浮点值(-3.4×10^38到+3.4×10^38)的范围内,所以我不明白为什么它不能像我期望的那样解析它 我又做了几次测试,但并没有让我更清楚发生了什么 来自以下文档: 所有浮点数的有效位数有限,这也决定了浮点数逼近实数的精度。单个值的精度最多为7位小数,但内部最多保留9位小数 这不是浮动范围的问题,而是精度的问题 最接近65

我试图将一个小数点后两位的字符串解析为浮点

问题是,结果对象的尾数不正确。 由于这与我的预期相差甚远,我很难相信这是一个四舍五入的问题

然而,双倍似乎有效

这个值似乎在浮点值(-3.4×10^38到+3.4×10^38)的范围内,所以我不明白为什么它不能像我期望的那样解析它

我又做了几次测试,但并没有让我更清楚发生了什么


来自以下文档:

所有浮点数的有效位数有限,这也决定了浮点数逼近实数的精度。单个值的精度最多为7位小数,但内部最多保留9位小数

这不是浮动范围的问题,而是精度的问题

最接近650512.56(例如)的精确值是650512.5625。。。然后在“监视”窗口中显示为650512.5625


老实说,如果要解析十进制数,可能应该使用
decimal
来表示它。这样,假设它在范围内,并且小数位数不超过所需的位数,您将获得原始字符串的精确数字表示形式。虽然您可以使用
double
并对9个有效数字保持良好状态,但您仍然无法存储解析的准确值-例如,文档中的“0.1”不能准确表示为
double

所有浮点数的有效位数有限,这也决定了浮点数逼近实数的精度。单个值的精度最多为7位小数,但内部最多保留9位小数

这不是浮动范围的问题,而是精度的问题

最接近650512.56(例如)的精确值是650512.5625。。。然后在“监视”窗口中显示为650512.5625


老实说,如果要解析十进制数,可能应该使用
decimal
来表示它。这样,假设它在范围内,并且小数位数不超过所需的位数,您将获得原始字符串的精确数字表示形式。虽然您可以使用
double
并可以处理9个有效数字,但仍然无法存储解析的准确值-例如,“0.1”不能准确表示为
double
c中浮点的尾数有23位,这意味着它可以有6-7个有效数字。在您的示例
650512.59
中,您有8个数字,而正是那个数字“错了”。Double的尾数为52位(15-16位),因此它当然会正确显示所有8或9位有效数字


更多信息请参见此处:

c#中浮点的尾数有23位,这意味着它可以有6-7个有效数字。在您的示例
650512.59
中,您有8个数字,而正是那个数字“错了”。Double的尾数为52位(15-16位),因此它当然会正确显示所有8或9位有效数字


查看此处了解更多信息:

为什么不显示代码而不是图像,我们可以自己测试它?@TimSchmelter这是一个观察窗口。这就是代码。这很简单。如果我们有样本数据,我们将更容易复制您的问题。而且我们无法从图像中获得它(将来无论如何都会腐烂)。这就是为什么我建议发布变量(包括结果),而不仅仅是图像。例如:
Console.WriteLine(float.Parse(“650512.5”))(我认为代码是不言自明的,任何更多的东西,如Console.WriteLine都是多余的。话虽如此,我承认你关于图像旋转的观点。我并没有说这个问题不清楚。我想如果人们能够重现你的问题,他们会更愿意提供帮助。手动输入所有数字,而不是复制粘贴,只需要更多的工作g你的样本。你为什么不显示代码而不是图像,我们可以自己测试它?@TimSchmelter这是一个观察窗口。这就是代码。这很简单。如果我们有样本数据,我们将更容易重现你的问题。我们无法从图像中获取它(将来会腐烂)。这就是为什么我建议发布变量(包括结果),而不仅仅是图像。例如:
Console.WriteLine(float.Parse(“650512.5”);…
(我认为代码是不言自明的,任何更多的东西,如Console.WriteLine都是多余的。话虽如此,我承认你关于图像旋转的观点。我并没有说这个问题不清楚。我想如果人们能够重现你的问题,他们会更愿意提供帮助。手动输入所有数字,而不是复制粘贴,只需要更多的工作g你的样本。如果你想有更高的精度,你可以使用双数据类型Cheers,这是有意义的,有点。现在可以使用双数据类型,但请注意对浮点类型系统进行进一步研究。顺便说一句,我爱你的C#书。如果你想有更高的精度,你可以使用双数据类型Cheers,这是有意义的,有点.Double现在就可以了,但请注意对浮点型系统做进一步的研究。顺便说一下,我喜欢你的C#书。