在VBA中获取日志的int时出错

在VBA中获取日志的int时出错,vba,Vba,当我计算log(8)/log(2)时,我得到了3,正如人们所期望的: ?log(8)/log(2) 3 但是,如果我像这样取这个计算的int,结果是2,因此是错误的: ?int(log(8)/log(2)) 2 这种情况是如何发生的以及为什么发生的?可能是因为实际返回的数字是double类型。因为浮点数和双精度数不能准确表示大多数基数为10的有理数,所以返回的数字类似于2.999999999。然后,当您应用int()时,将截断.99999999 浮点数的工作原理:它用一位表示符号,用

当我计算
log(8)/log(2)
时,我得到了
3
,正如人们所期望的:

?log(8)/log(2)
3 
但是,如果我像这样取这个计算的int,结果是2,因此是错误的:

?int(log(8)/log(2)) 
 2 

这种情况是如何发生的以及为什么发生的?

可能是因为实际返回的数字是double类型。因为浮点数和双精度数不能准确表示大多数基数为10的有理数,所以返回的数字类似于2.999999999。然后,当您应用
int()
时,将截断.99999999


浮点数的工作原理:它用一位表示符号,用几位表示指数,其余表示实际分数。这导致数字以类似于1.45*10^4的形式表示;除了基数不是10,而是2。

可能是因为实际返回的数字是double类型。因为浮点数和双精度数不能准确表示大多数基数为10的有理数,所以返回的数字类似于2.999999999。然后,当您应用
int()
时,将截断.99999999


浮点数的工作原理:它用一位表示符号,用几位表示指数,其余表示实际分数。这导致数字以类似于1.45*10^4的形式表示;除了基数不是10,而是2。

可能是因为实际返回的数字是double类型。因为浮点数和双精度数不能准确表示大多数基数为10的有理数,所以返回的数字类似于2.999999999。然后,当您应用
int()
时,将截断.99999999


浮点数的工作原理:它用一位表示符号,用几位表示指数,其余表示实际分数。这导致数字以类似于1.45*10^4的形式表示;除了基数不是10,而是2。

可能是因为实际返回的数字是double类型。因为浮点数和双精度数不能准确表示大多数基数为10的有理数,所以返回的数字类似于2.999999999。然后,当您应用
int()
时,将截断.99999999


浮点数的工作原理:它用一位表示符号,用几位表示指数,其余表示实际分数。这导致数字以类似于1.45*10^4的形式表示;除此之外,基数不是10,而是2。

使用
CLng
进行舍入。使用
CLng
进行舍入。使用
CLng
进行舍入。使用
CLng
进行舍入。