double是雙精度 有效數(shù)值位52位 表示成指數(shù)的形式 即指數(shù)11位 即表示成
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了泗水免費(fèi)建站歡迎大家使用!
所以180.89305用2進(jìn)制表示是10110100.1110010010011110111011001011111110110001010110110101
即
180.89305在double中存在的實(shí)際數(shù)值是
1.01101001110010010011110111011001011111110110001010110110101 *2^7
取小數(shù)點(diǎn)后 52位有效值后 等于10進(jìn)制的180.893049999999998
所及加最后變成了 1808930.99999999998
第一次當(dāng)然輸出近似值1808931
第二次int函數(shù)去掉了小數(shù)點(diǎn)后的數(shù)int就是只取整數(shù)的部位的不是四舍五入 所以少了1
有兩個(gè)函數(shù):Int 和 Fix。
Int 定義為返回不大于給定參數(shù)的最大整數(shù)值,如:
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 又稱“截尾”函數(shù)。
即簡(jiǎn)單保留整數(shù)部分,如:
Fix(3.9) = 3
Fix(-3.9) = -3
如果需要“四舍五入”,則得巧妙利用 Int 函數(shù):
Int(x + 0.5) 表示四舍五入到個(gè)位;
Int(x * 100 + 0.5) * 0.01 表示四舍五入到百分位(小數(shù)點(diǎn)后第二位)
浮點(diǎn)數(shù)本身應(yīng)該就是一個(gè)近似數(shù),所以結(jié)果異常應(yīng)該是蠻正常的吧
Dim s As String '直接做字符串可能好處理點(diǎn)
s = Text1.Text 's="179.2900"
Print Mid(s, 1, 3), Mid(s, 5, 2), Mid(s, 7, 2)
對(duì)補(bǔ)充的補(bǔ)充:
VB提供這么多類型轉(zhuǎn)換函數(shù)做什么用的?至于度數(shù)位數(shù)不定,總在小數(shù)點(diǎn)之前吧,instr()、split()函數(shù)都可以滿足你的要求,建議你比較誤差的時(shí)候順便去研究一下浮點(diǎn)數(shù)在內(nèi)存中是怎么存放的。