小编Iag*_*ool的帖子

将小数转换为长整型,同时允许溢出

所以我试图对小数进行未经检查的转换(用作任何数字的“持有者”,可以是整数,可以是浮点数等)。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),这正是我想要的。

.net c#

4
推荐指数
1
解决办法
104
查看次数

标签 统计

.net ×1

c# ×1