c# - System.Convert.ToDouble(decimal) 给出两个不同的答案
问题描述
我有一个非常奇怪的问题。我在即时窗口中运行它:
?(System.Convert.ToDouble(2458963.229671001113318401517D))
2458963.229671001
这是我所期望的!
然后,稍后在我的应用程序中,初始化托管 DirectX 后,我得到以下信息:
?(System.Convert.ToDouble(2458963.229671001113318401517D))
2458963.25
在我的代码中达到这一点之后,永远System.Convert.ToDouble()
会返回截断和错误的结果。
我已经隔离了导致这种行为变化的单行System.Convert.ToDouble()
:
new Device(adapterOrdinal, dType, this, flags, m_presentParams);
这是一个Microsoft.DirectX.Direct3D.Device
对象,来自:
// Assembly: Microsoft.DirectX.Direct3D, Version=1.0.2902.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
我不确定为什么创建一个Microsoft.DirectX.Direct3D.Device
会导致System.Convert.ToDouble()
行为方式发生变化。
解决方案
根据https://docs.microsoft.com/en-us/previous-versions/bb324030(v%3Dvs.85):
创建设备对象时,公共语言运行时会将浮点单元 (FPU) 更改为单精度以保持更好的性能。要维护默认的双精度 FPU(公共语言运行时的默认值),请在创建 Device 对象时使用 CreateFlags.FpuPreserve 标志
推荐阅读
- c - pthread_mutex 和进程终止
- c# - 创建文本框组件 c#
- mysql - MySQL 在 true 时选择条目,在 false 时替换为 null
- powerbi - 使用 Power BI 使用自定义查询从文件夹加载文件
- python - 在 for 循环中引用类属性
- ruby - Rails 5 api控制器未接收前端应用程序发送的参数
- r - lcmm - 知道哪些 ID 在哪个类中
- python - Python 多处理池:maxtasksperchild
- python - Selenium:Python 无法从 elif 中找到元素
- mongodb - 聚合管道与 CLI 相比返回错误结果