gpt4 book ai didi

c# - 从 double 转换为十进制时避免 OverflowException

转载 作者:行者123 更新时间:2023-12-04 03:16:36 25 4
gpt4 key购买 nike

转换时double (或 float )到 decimal , 溢出异常是可能的。所以我写了这个小的扩展方法,通过饱和来防止这种情况:

public static decimal ToDecimalSafe(this double input)
{
try
{
return (decimal)input;
}
catch (OverflowException)
{
if (input < 0)
return decimal.MinValue;
else
return decimal.MaxValue;
}
}

问题是,这种溢出在我的用例中经常发生,违反了“异常(exception)应该是异常(exception)”的准则。是的,这会减慢应用程序的速度,但这并不是很重要。真正的问题是它还会在调试过程中导致很多第一次机会异常,这很烦人。这是第二次尝试,似乎工作正常:

public static decimal ToDecimalSafe(this double input)
{
if (input < (double)decimal.MinValue)
return decimal.MinValue;
if (input > (double)decimal.MaxValue)
return decimal.MaxValue;

try
{
return (decimal)input;
}
catch (OverflowException)
{
if (input < 0)
return decimal.MinValue;
else
return decimal.MaxValue;
}
}

我离开了 try-catch 以确保我捕获了一些可能的边缘情况。这里的问题是:是否存在任何边缘情况,或者我可以省略 try-catch 吗?

可以double>= (double)decimal.MinValue<= (double)decimal.MaxValue转换时仍然会导致溢出?

最佳答案

异常不会再发生了。您可以通过这种方式修改您的代码。

public static decimal ToDecimalSafe(this double input)
{
if (input < (double)decimal.MinValue)
return decimal.MinValue;
else if (input > (double)decimal.MaxValue)
return decimal.MaxValue;
else
return (decimal)input;
}

您也可以使用特定的转换方法,但它不会阻止异常

Convert.ToDecimal

如果您的问题只是烦人的调试中断,那么我建议您查看 [DebuggerStepThrough] 或 [DebuggerHidden] 属性

关于c# - 从 double 转换为十进制时避免 OverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419003/

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