gpt4 book ai didi

c# - 判断运算是否会溢出?

转载 作者:行者123 更新时间:2023-11-30 14:27:07 26 4
gpt4 key购买 nike

我的应用程序中有一些类代表物理单位,例如温度。这些类能够让一些单位与其关联并更改,例如摄氏度和开尔文。它们还有用户定义的最大值和最小值。

当我想更改单位时,我会得到两个给定单位之间的换算系数,然后更改MinMaxData通过使用转换因子执行一些算术运算来获取类中的值。

Double ConversionFactor = GetConversionFactor(curUnits, newUnits);
Units = newUnits;
Min *= ConversionFactor;
Max *= ConversionFactor;
Data *= ConversionFactor;

我遇到的问题是,有时用户可能允许最大值和最小值是某些类型的 MinValueMaxValue,例如 Double。如果用户要更改转换因子大于 1 的单位,这将导致溢出。

在 C# 中是否有一种方法可以检测上溢和下溢是否都会发生这种溢出?

根据我通过一些测试可以看出的情况,我认为我只需要检查运算结果是否不等于正无穷大或负无穷大?如果是这样,我就可以将该值设置回 MinValueMaxValue

另外,奖金问题。在我的测试中,我发现如果我创建一个 Double max = Double.MaxValue 并向其中添加一些像 100 这样的小值。该值不会改变。

这是为什么? MaxValuePositiveInfinity 之间是否存在某个阈值,因为在这么大的值下精度如此之低?

最佳答案

如果变量是 double 型,您应该检查Infinity

最好的方法是使用 double.IsInfinity,它将检查下溢和溢出(正无穷大和负无穷大)。

bool overflowed = double.IsInfinity(Min);

如果需要,您可以将其包装在自己的扩展方法中。


如果变量是整数,您可以将语句包装在 checked block 中,这将在操作溢出时引发异常。这不是预防措施,但可以起到作用。

checked
{
...
}

你可以try...catch

关于c# - 判断运算是否会溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33760972/

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