因此,我正在try 对小数进行Java风格的强制转换(它用作任何数字的"持有符",可以是整数,也可以是浮点数等). C#的问题是,在将DECIMAL转换为INTEGER类型时,它不允许溢出,即使溢出是可以接受和预期的.未选中的上下文只适用于整数类型,而不适用于小数,所以我正在寻找实现这一点的最佳方法.
这是我目前的方法(以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;
}
这样,如果我try 将2731498700m
转换为Int32,我将得到-1563468596
而不是Overflow Exception,这正是我想要的.