gpt4 book ai didi

vb.net - 如果我在 vb.net 中输入数字,Visual Studio 2012 会将数字添加到我的 double 值中

转载 作者:行者123 更新时间:2023-12-02 04:34:52 33 4
gpt4 key购买 nike

一个非常奇怪的,大概是 Visual Studio 2012 的有用行为。当我在 vb.net 中输入 double 时:

Dim myD as Double = 1.4

当我按回车键或将焦点移至另一方向时,格式开始并将上面的内容更改为:

Dim myD as Double = 1.39999999999999998

或 1.6 作为

Dim myD as Double = 1.6000000000000001

此行为似乎不会发生在所有 double 中。 1.3、1.5、1.7 和 1.8请参阅此 youtube 电影以了解实际行为: http://youtu.be/afw4jg58-aU

为什么,更重要的是,我该如何防止这种情况发生?

编辑:

安装的扩展是: enter image description here

第二次编辑

行为似乎已经消失了。我不知道是什么原因造成的,所以为了将来引用,这对任何人都没有用,但现在,我很高兴我不必按照建议进行故障排除。

最佳答案

this question 中也报告了完全相同的问题.适用于 VS2010,否则没有可用的答案。

这是一个环境问题,代码正在加载到 Visual Studio 中,这会扰乱您机器上的 FPU 控制字。它是一个决定浮点运算如何工作的处理器寄存器,它看起来像这样:

enter image description here

舍入控制位是此类问题的一个很好的来源,它们决定了如何将内部 80 位精度浮点值截断为 64 位。选项有向上舍入、向下舍入和最接近的舍入。精度控制位也是一个不错的选择,选项有完整的 64 位精度、53 位和 24 位。

VS2012 和 .NET Framework 都依赖于操作系统的默认设置,并期望此后不会更改。当代码实际上确实更改它时,很难诊断出问题,您的观察非常符合该模式。最常见的麻烦制造者是:

  • 编码 uses DirectX没有 D3DCREATE_FPU_PRESERVE 选项。 DirectX 重新编程精度和舍入控制位以挤出更多性能。

  • 用较旧的 Borland 语言产品编写的代码。它的运行时库在 non-standard way 中初始化 FPU 控制字.否则,依赖于旧运行时库或在更高版本中执行的旧遗留初始化的软件会出现一般性问题。

  • 一般来说,任何使用媒体编解码器或媒体 API 的代码。出于与 DirectX 相同的原因,此类代码倾向于重新编程 FPU 以挤出性能。在我开发的大量使用此类编解码器的产品中尤其臭名昭著。代码库中充斥着调用外部代码后重置 FPU 控制字的调用。

查找和消除此类代码可能非常困难。 DLL 被各种善意的恶意软件注入(inject)到另一个进程中。 SysInternals 的 Autoruns 实用程序非常有用,它显示了所有可能的代码注入(inject)方式,并提供了一种简单的方法来禁用它。准备好对您所看到的内容感到震惊,并随时禁用不具有 Microsoft 版权的内容。

对于动态注入(inject),您需要一个调试器来查看加载到 VS 中的内容。再次启动 VS 并使用 Tools + Attach to Process 附加到第一个,选择非托管调试器。 Debug + Windows + Modules 显示加载了哪些 DLL。请注意 DLL 可能是 transient 的,像 File + Open + File 这样的 shell 对话框会将 shell 扩展动态加载到 VS 中,然后再卸载它们。祝你好运,你会需要它,有时唯一的修复是相当激烈的修复。

关于vb.net - 如果我在 vb.net 中输入数字,Visual Studio 2012 会将数字添加到我的 double 值中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203184/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com