关于VB.net取整的问题
发布网友
发布时间:2022-05-25 12:17
我来回答
共2个回答
热心网友
时间:2023-10-26 21:31
double是双精度 有效数值位52位 表示成指数的形式 即指数11位 即表示成
所以180.89305用2进制表示是10110100.1110010010011110111011001011111110110001010110110101
即
180.89305在double中存在的实际数值是
1.01101001110010010011110111011001011111110110001010110110101 *2^7
取小数点后 52位有效值后 等于10进制的180.893049999999998
所及加最后变成了 1808930.99999999998
第一次当然输出近似值1808931
第二次int函数去掉了小数点后的数int就是只取整数的部位的不是四舍五入 所以少了1
热心网友
时间:2023-10-26 21:31
int(x)函数是取不大于x的最大整数。
如果你
Dim A As Double = 180.8931 * 10000
那么
Trace.WriteLine(A) '输出A为1808931
A = Int(A)
Trace.WriteLine(A) '输出A为1808931
而你是:
Dim A As Double = 180.89305 * 10000+0.5
是乘后再加的0.5
在Int时就会
Trace.WriteLine(int(A)) '输出A为1808930
相当于int(180.89305 * 10000+0.5)而不是:int(1808931)。追问你解释的很有道理,我也是这么想的,但是我还是觉得奇怪
Dim A As Double = 180.8931 * 10000 + 0.5
这句执行完,A的值不是1808931吗?
为什么Int(A)还会从头算一遍:int(180.89305 * 10000+0.5)
难道定义完后,A变更存储的不是数字,而是一串表达式?A的变量里到底是什么?
追答应该是你定义了A这个变量= 180.8931 * 10000 + 0.5
Int(A)时,直接从这个变量定义里取的原因。