How can I deal with this double.NaN

I have the a Convert.ToDecimal() which occasionally throws an exception with the message

Value was either too large or too small for a Decimal

, because the call to DataContainer.GetValue(ColKeyId, index) returns double.NaN.

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

I cannot change the API implementation call of the GetValue(). What would be the best approach to deal with the conversion to decimal of a NaN double?

Jon Skeet
people
quotationmark

Okay, so it sounds like you just need to detect whether or not it's a NaN value:

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

To be honest, it's not clear why you're converting from double to decimal at all, but this code at least shows how you can detect NaN/infinite values. Note that I've changed the calls to Convert.ToDecimal to simple casts to make the code simpler - but you could use Convert.ToDecimal if you want, of course..

people

See more on this question at Stackoverflow