相关疑难解决方法(0)

在VBA中无限和超越

这篇文章是关于.NET NaN和Inifinite值传递回Excel 2010 VBA.

我使用不受我控制的C#方法(显然)可以返回.NET NaN或Neg,Pos Infinity.VBA中的结果很奇怪(比通常更奇怪),而我能够安全地处理这种情况的唯一方法是一个不优雅的三字符串比较"-1.#IND"或"-1.#INF"或"1.#INF".

有没有更好的办法?

如果你好奇,我已经在这里记录了奇怪的部分.(这些例子是针对NaN的,但对于pos或neg infinity来说也是如此.)

double  dVal  =  CSharpMethodReturningDouble()  ' via .NET assembly / COM interop
variant vVal  =  CSharpMethodReturningDouble()  ' via .NET assembly / COM interop
Run Code Online (Sandbox Code Playgroud)

如果C#方法返回double.NaN,那么我们(在immed窗口中):

?dVal               
 -1.#IND            
?vVal                
 -1.#IND             
Run Code Online (Sandbox Code Playgroud)

持有NaN的(盒装)变体对数字测试为正,type = double

?IsNumeric(vVal) 
 True
?TypeName(vVal)
 Double
Run Code Online (Sandbox Code Playgroud)

比较(盒装)变体NaN的工作,但你得到的结果相反.对(未装箱的)双打进行比较会导致溢出异常

?vVal=1          '<== NaN comparisons should always return false
 True               
?vVal=0          '<== that's not what you get with -1.#IND
 True               
?dVal=0          '<== strangely, the same comparison on the unboxed double fails
 (OverFlow Exc)
Run Code Online (Sandbox Code Playgroud)

(盒装)变量的操作导致溢出异常(未装箱的)操作加倍工作(并返回-1.#IND,如预期的那样)

?vVal * …
Run Code Online (Sandbox Code Playgroud)

.net excel vba excel-vba

28
推荐指数
1
解决办法
3007
查看次数

你如何让VB6用+ infinity,-infinity和NaN初始化双打?

VB6似乎不容易将+无穷大,无穷大和NaN存储到双变量中.如果可以的话,我可以在复杂数字的背景下与这些值进行比较.怎么样?

vb6 nan infinity

8
推荐指数
2
解决办法
6604
查看次数

标签 统计

.net ×1

excel ×1

excel-vba ×1

infinity ×1

nan ×1

vb6 ×1

vba ×1