我有一个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的十进制转换的最佳方法是什么?
答案 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);
}
}