| 是VB的bug,还是C#的bug? |
| [ 来源:ITWENKU 时间:2007-4-16 10:56:15 | 浏览:214人次
] |
| |
|
Private Sub Form_Load() Dim maxcoordx As Double: maxcoordx = 1.79769313486232E+308 MsgBox maxcoordx End Sub 就是这样简单的一个东西竟然出现问题,我在调试c#程序的时候通过Double.MaxValue得到DOUBLE的最大值是1.79769313486232E+308,我复制下来以后直接赋给VB程序的maxcoordx变量,可以编译,没有提示溢出,把VB工程关闭重新打开以后在编译却提示溢出,我知道vb里的double最大值是1.79769313486231570E+308,但是为什么我从C#调试程序里复制过来的1.79769313486232E+308 第一次可以编译呢?
看来是VB描述的BU:VB给出的是极限值的点值,实际数应小于此值。 Private Sub Form_Load() Dim maxcoordx As Double maxcoordx = 1.79769313486231E+308 MsgBox maxcoordx End Sub
VB 的变量是有符号的,正数实际只有 Double 的一半,所以如果 C 里面用无符号的双精度,VB 会溢出
Private Sub Form_Load() Dim maxcoordx As Double maxcoordx = cdbl(1.79769313486231E+308 ) MsgBox maxcoordx End Sub
第一次可以编译? 好像不可能吧?
第一次确实是可以编译的,而且1.79769313486232E+308这个数必须是从c#的调试程序里复制过来的,在别的地方复制就不能编译。真是怪了。
Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。
|
|
 |
推荐文章 |
|