System.Convert.ToDouble(decimal)提供两个不同的答案

问题描述 投票:1回答:1

我有一个很奇怪的问题。我在即时窗口中运行此代码:

?(System.Convert.ToDouble(2458963.229671001113318401517D))

2458963.229671001

我期望的是!

然后,稍后在我的应用程序中,初始化Managed 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()的行为发生变化。

c# precision managed-directx
1个回答
3
投票

根据https://docs.microsoft.com/en-us/previous-versions/bb324030(v%3Dvs.85)

创建Device对象时,公共语言运行时将将浮点单位(FPU)更改为单精度以保持更好的性能。为了维持默认的双精度FPU,这是公共语言运行时的默认设置,请使用创建设备对象时创建CreateFlags.FpuPreserve标志

© www.soinside.com 2019 - 2024. All rights reserved.