gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:31:31 30 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 附加到第一个进程,选择非托管调试器。调试 + Windows + 模块显示加载了哪些 DLL。请注意,DLL 可能是暂时的,像"file"+“打开”+"file"这样的 shell 对话框会将 shell 扩展动态加载到 VS 中,然后再次卸载它们。祝你好运,你会需要它,有时唯一的解决方法是相当彻底的解决方法。

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

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