我怎么能处理这个double.NaN

时间:2015-11-18 09:47:31

标签: c#

我有一个Convert.ToDecimal()偶尔会抛出一条带有消息

的异常
  

对于十进制

,值太大或太小

,因为对DataContainer.GetValue(ColKeyId, index)的调用会返回double.NaN

if (Convert.ToDecimal(DataContainer.GetValue(ColKeyId, index)) != Convert.ToDecimal(newValueToSet))
{
    DataContainer.SetValue(ColKeyId, index, newValueToSet);
}

我无法更改GetValue()的API实施调用。 处理NaN double的十进制转换的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

好的,听起来你只需要检测它是否是NaN值:

double value = DataContainer.GetValue(ColKeyId, index);
if (double.IsNaN(value) || double.IsInfinity(value) ||
    (decimal) value != (decimal) newValueToSet)
{
    DataContainer.SetValue(ColKeyId, index, newValueToSet);
}

说实话,我不清楚为什么你要从double转换为decimal,但这段代码至少说明了如何检测NaN /无限值。请注意,我已将对Convert.ToDecimal的调用更改为简单的强制转换,以使代码更简单 - 但如果您愿意,可以使用Convert.ToDecimal

答案 1 :(得分:0)

Decimal.TryParse

那么你就会知道它是否转换了,如果没有转换为defasult值或者从其他途径分支出来。

HTH

答案 2 :(得分:0)

您可以在设置之前检查值是否为double.NaN

if (!Double.IsNaN(DataContainer.GetValue(ColKeyId, index)))
{
    if (Convert.ToDecimal(DataContainer.GetValue(ColKeyId, index)) != Convert.ToDecimal(newValueToSet))
    {
        DataContainer.SetValue(ColKeyId, index, newValueToSet);
    }
}