c# - 为什么 float 在声明时显示精确表示

标签 c# c++ .net floating-point

articles我看了很多遍|和 MSDN,float(或 double)没有真实世界整数或小数值的精确表示。正确的 !当相等性检查出错或断言简单的加法或减法测试时,这是可见的。

也有人说 float 没有像 0.1 这样的十进制值的精确表示,但是如果我们在 visual studio 中声明一个像 float a = 0.1f; 这样的 float,它们是如何显示的调试时精确 0.1?它应该显示类似 0.09999999.. 的内容。我在哪里错过了一个链接来理解它。

enter image description here

这是一个外行问题,或者我可能仍然缺少一些概念!

最佳答案

how do they show exact 0.1 while debugging

0.1 不是 float 的精确值。它恰好是您在原始作业中指定的值,但这不是 float 的值。我可以看到它令人困惑 :) 我怀疑调试器正在显示最短的字符串表示形式,它明确地以相同的值结束。

尝试使用:

float a = 0.0999999999f;

...然后我怀疑在调试器中您会看到 that 也是 0.1

因此,并不是调试器显示的是“更准确”的值——而是它显示的是“更普遍方便”的表示。

如果你想显示存储在 float 或 double 中的精确值,我有some code you can use for that .

关于c# - 为什么 float 在声明时显示精确表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066521/

相关文章:

c# - Docker Asp.net 核心应用程序不会加载我的 JS、imgs

c++ - 在 Visual Studio 中导入 Dll

.net - 正则表达式头痛

c# - 反编译的 DLL - 有助于判断它是 C# 还是 VB.NET 的线索?

c++ - 在类中调用自由 float 函数

.net - 是否有 .Net 属性来防止调试器中的属性评估?

c# - 在 ASP.NET Core 3.1 MVC+Razor Pages+Web API 中设置默认页面

c# - "Private Data"在 VMMAP 中定义了什么?

c# - 使用 Json.NET JsonSchemaGenerator 将 JSON Schema 属性(标题、描述)添加到 C# 类属性

c++ - 运行时使用的自定义调试 printf