C# 为什么float在声明时显示精确表示
我在和MSDN中多次阅读到C# 为什么float在声明时显示精确表示,c#,c++,.net,floating-point,C#,C++,.net,Floating Point,我在和MSDN中多次阅读到float(或double)没有实际整数或十进制值的精确表示。对的当等式检查出错时,或者在断言简单的加法或减法测试时,这是可见的 也有人说float没有精确的十进制值表示,比如0.1,但是如果我们在VisualStudio中声明一个float,比如float a=0.1f,调试时如何显示精确的0.1?它应该显示类似于0.09999999..的内容。我在哪里错过了理解它的链接 这是一个门外汉式的问题,或者可能是我仍然缺少一些概念 调试时如何显示精确的0.1 0.1不是浮
float
(或double
)没有实际整数或十进制值的精确表示。对的当等式检查出错时,或者在断言简单的加法或减法测试时,这是可见的
也有人说float没有精确的十进制值表示,比如0.1,但是如果我们在VisualStudio中声明一个float,比如float a=0.1f代码>,调试时如何显示精确的0.1?它应该显示类似于0.09999999..
的内容。我在哪里错过了理解它的链接
这是一个门外汉式的问题,或者可能是我仍然缺少一些概念
调试时如何显示精确的0.1
0.1不是浮点的精确值。它恰好是您在原始赋值中指定的,但这不是浮点值。我可以看出这是令人困惑的:)我怀疑调试器显示的是最短的字符串表示形式,它明确地以相同的值结束
尝试使用:
float a = 0.0999999999f;
。。。然后我怀疑在调试器中,您也会看到0.1
因此,调试器并不是在显示“更精确”的值,而是在显示“更普遍方便”的表示
如果您想显示存储在浮点或双精度中的精确值,我有。谢谢Jon!我在读你的文章和你指出的另一篇文章。我还运行了DoubleConverter.cs。这一切都提出了这个问题。但现在我更清楚了。在你回答之前,我还想知道你写双转换器得到浮点的精确表示是什么意思;因为正如前面讨论的那样,IDE本身显示了0.1。@NirajDoshi:对-我的观点是0.1不是确切的值。我将对答案进行编辑以使其更清晰。0.1f
类似于0.10000001490161119384765625
,因此只有在第9个有效数字上才有内容!=初始值1
后的0和浮点值
的精度仅为7位左右。