我有一个Convert.ToDecimal()
偶尔抛出一个异常与消息我该如何处理这个double.NaN
价值要么过大或过小的十进制
,因为致电DataContainer.GetValue(ColKeyId, index)
返回double.NaN
。我不能更改GetValue()
的API实现调用。 处理转换为NaN double的十进制数的最佳方法是什么?
我有一个Convert.ToDecimal()
偶尔抛出一个异常与消息我该如何处理这个double.NaN
价值要么过大或过小的十进制
,因为致电DataContainer.GetValue(ColKeyId, index)
返回double.NaN
。我不能更改GetValue()
的API实现调用。 处理转换为NaN double的十进制数的最佳方法是什么?
好了,这听起来像你只需要检测是否是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
如果你愿意,当然..
Decimal.TryParse
,那么你就会知道,如果它转换与否,如果没有一个assigne值defasult或岔开了一些其他的途径。
HTH
否,因为TryParse(字符串,十进制)。我有一个双精度型转换为十进制。与字符串无关 – Nostradamus
您可以检查是否值double.NaN
设置前:
如果可以的话,添加'TryGetValue',如果可能的话''DataContainer''将返回'bool'和'out'的结果。如果这不可能,那就去'try' /'catch' – Alireza
那么当结果是NaN时,你希望发生什么?实现将非常简单,但你需要确定你想要做什么。 (请注意,你应该考虑积极和消极的无限......) –
@Jon。当结果是NaN时,我希望能够和Cal SetValue – Nostradamus