使用DataTable.Compute
,并建立了一些测试案例:
dt.Compute("0/0", null); //returns NaN when converted to double
dt.Compute("0/0.00", null); //results in DivideByZero exception
我更改了代码以同时处理这两个问题。但是想知道这里发生了什么吗?
答案 0 :(得分:5)
我猜想,发生这种情况是因为带有小数点的文字被威胁为{{1}}并导致System.Decimal
根据MSDN
整数文字[+-]?[0-9] +被视为System.Int32,System.Int64 或System.Double
没有科学符号但带小数点的实数文字, 被视为System.Decimal。如果数量超过最大值或 System.Decimal支持的最小值,然后将其解析为 System.Double。
尝试分割一个对象时抛出的异常 整数或十进制值零。
对于DivideByZeroException
,它返回Nan,因为根据reference source,如果操作是除法并且常量是整数,它将变为双精度结果类型(感谢@ steve16351表示很高兴)>