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
有两个函数:Int 和 Fix。
Int 定义为返回不大于给定参数的最大整数值,如:
Int(3.9) = 3
Int(3.1) = 3
Int(3) = 3
Int(0) = 0
Int(-3) = -3
Int(-3.1) = -4
Int(-3.9) = -4
Fix 又称“截尾”函数。
即简单保留整数部分,如:
Fix(3.9) = 3
Fix(-3.9) = -3
如果需要“四舍五入”,则得巧妙利用 Int 函数:
Int(x + 0.5) 表示四舍五入到个位;
Int(x * 100 + 0.5) * 0.01 表示四舍五入到百分位(小数点后第二位)
浮点数本身应该就是一个近似数,所以结果异常应该是蛮正常的吧
Dim s As String '直接做字符串可能好处理点
s = Text1.Text 's="179.2900"
Print Mid(s, 1, 3), Mid(s, 5, 2), Mid(s, 7, 2)
对补充的补充:
VB提供这么多类型转换函数做什么用的?至于度数位数不定,总在小数点之前吧,instr()、split()函数都可以满足你的要求,建议你比较误差的时候顺便去研究一下浮点数在内存中是怎么存放的。