gpt4 book ai didi

c# - CLR 如何在内部将 Double/Single 转换为 Decimal?

转载 作者:行者123 更新时间:2023-12-01 19:01:32 30 4
gpt4 key购买 nike

我有兴趣了解 .NET 如何将 Double/Single 数据类型转换为 Decimal,因此我开始研究我在代码中遇到的 Decimal 类型结构体源代码下面。

似乎所有其他类型转换都是在框架的类库中实现的,除了由 CLR 外部处理的 double/float 之外。

所以,基本上问题是CLR 如何进行转换?

    [MethodImpl(MethodImplOptions.InternalCall)]
public extern Decimal(float value);

[MethodImpl(MethodImplOptions.InternalCall)]
public extern Decimal(double value);

public Decimal(int value)
{
int num = value;
if (num < 0)
{
this.flags = -2147483648;
num = -num;
}
else
{
this.flags = 0;
}
this.lo = num;
this.mid = 0;
this.hi = 0;
}

[CLSCompliant(false)]
public Decimal(uint value)
{
this.flags = 0;
this.lo = (int)value;
this.mid = 0;
this.hi = 0;
}

.
.
.

最佳答案

虽然它不如最新的 CLR,但一般细节可以在之前发布的 SSCLI 2(AKA Rotor)中得到确认。 System.Decimal 的 native 部分在 clr\src\vm\comdecimal.cpp 中实现。每个电话VarDecFromR4VarDecFromR8 , 分别。这些是由 OleAut32.dll 公开的 native API。

至于你的下一个问题:OleAut32是如何实现这些功能的?最好的办法是附加一个调试器并反汇编函数。使用 WinDbg,您可以使用 uf 来执行此操作命令。

关于c# - CLR 如何在内部将 Double/Single 转换为 Decimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294309/

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