所以我试图对小数进行未经检查的转换(用作任何数字的“持有者”,可以是整数,可以是浮点数等)。C# 的问题是,在将小数转换为整数类型时,它不允许溢出,即使溢出是可以接受和预期的。未经检查的上下文仅适用于整数类型,不适用于小数,因此我正在寻找实现此目的的最佳方法。
这是我目前的方法(以Int32为例),如果您有任何建议,请写下来。
private static int ToInt32(decimal value)
{
if (value is < int.MinValue or > int.MaxValue)
{
decimal range = 1L + int.MaxValue - int.MinValue;
value = ((((value - int.MinValue) % range) + range) % range) + int.MinValue;
}
return (int)value;
}
Run Code Online (Sandbox Code Playgroud)
有了这个,如果我尝试转换2731498700m为 Int32,我会得到-1563468596(而不是 OverflowException),这正是我想要的。